博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python logging模块
阅读量:4613 次
发布时间:2019-06-09

本文共 3032 字,大约阅读时间需要 10 分钟。

logging全局函数

通过调用logging模块级别函数进行日志记录,本质上是内部创建了一个root logger来进行操作。

import logginglogging.basicConfig(level=logging.INFO, format='[%(asctime)s][%(name)s][%(levelname)s]: %(message)s')logging.info('INFO LOG')logging.warning('WARN LOG')logging.error('ERROR LOG')# result[2019-04-15 14:54:37,098][root][INFO]: INFO LOG[2019-04-15 14:54:37,098][root][WARNING]: WARN LOG[2019-04-15 14:54:37,098][root][ERROR]: ERROR LOG

logging levels

1192583-20190415145622140-906850990.png

Logger Object

Logger是logging模块中的操作句柄,我们可以对其进行各种配置然后执行记录操作。

常见操作就是addHandler, addFilter等配置操作和info(),error()等记录操作

import logginglogger = logging.getLogger(__name__) # 通常使用模块名称命名logger避免重复,相同命名的logger会彼此覆盖##常用操作logger.setLevel() # 虽然Handler也会配置level,这里是全局配置logger.addHandler()logger.removeHandler()logger.addFilter()logger.removeFilter()logger.debug()logger.info()logger.warning()logger.error()logger.exception() # level是error,但会记录traceback信息

Formatter Object

Formatter用于定义日志输出格式,通常填入Handler使用。Formatter使用格式化字符串进行配置,格式是standard Python %-style mapping keys ,默认是'%(message)s'

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')常见参数:%(name)s: 打印logger的名称%(levelno)s:打印日志级别的数值%(levelname)s:打印日志级别的名称%(pathname)s:打印当前执行程序的路径,其实就是sys.argv[0]%(filename)s:打印当前执行程序名%(funcName)s:打印日志的当前函数%(lineno)d:打印日志的当前行号%(asctime)s:打印日志的时间%(thread)d:打印线程ID%(threadName)s:打印线程名称%(process)d:打印进程ID%(message)s:打印日志信息

详细见:

Handler Object

Handler是一个处理对象,我们通过对其设置决定以什么样的方式处理和记录日志,Handler一般不直接使用,它作为一个基础类,更多地使用他的子类比如RotatingFileHandler, TimedRotatingFileHandler

RotatingFileHandler

RotatingFileHandler将按照文件大小进行日志文件回滚, 基本使用步骤为实例化,设置等级,设置格式,添加入logger即可

import loggingfrom logging.handlers import RotatingFileHandlerlogger = logging.getLogger(__name__)logger.setLevel(logging.INFO)file_handler = RotatingFileHandler(filename="test.log", maxBytes=1 * 1024, backupCount=10, encoding='utf8')file_handler.setLevel(logging.INFO)formatter = logging.Formatter('[%(asctime)s][%(name)s][%(levelname)s]: %(message)s')file_handler.setFormatter(formatter)logger.addHandler(file_handler)logger.info('INFO LOG')logger.warning('WARN LOG')logger.error('ERROR LOG')

1192583-20190415160710018-1253681301.png

回滚步骤:日志总是会写入test.log,当test.log的大小达到maxBytes,会被重命名为test.log.1,然后新建test.log继续写入日志。根据backupCount的值决定保留多少日志,命名依次为test.log.1, test.log.2 ... ,当日志文件数量达到backupCount的时候,test.log.1的文件会被删除,然后将test.log重新命名为test.log.1完成替换,依次类推。

TimedRotatingFileHandler

TimedRotatingFileHandler按照时间进行日志的切分和回滚,使用步骤和RotatingFileHandler相同

import loggingfrom logging.handlers import TimedRotatingFileHandlerlogger = logging.getLogger(__name__)logger.setLevel(logging.INFO)file_handler = TimedRotatingFileHandler(filename="test.log", when='S', interval=1, backupCount=5, encoding='utf8')# when的取值:        # S - Seconds        # M - Minutes        # H - Hours        # D - Daysfile_handler.setLevel(logging.INFO)formatter = logging.Formatter('[%(asctime)s][%(name)s][%(levelname)s]: %(message)s')file_handler.setFormatter(formatter)logger.addHandler(file_handler)logger.info('INFO LOG')logger.warning('WARN LOG')logger.error('ERROR LOG')

1192583-20190415160510847-755853228.png

转载于:https://www.cnblogs.com/Peter2014/p/10711224.html

你可能感兴趣的文章
iOS -Swift 3.0 -UILabel属性大全
查看>>
iOS开发UI篇—UITabBarController简单介绍
查看>>
Android应用程序的安装位置
查看>>
G - SDOI
查看>>
[LeetCode]Reverse Linked List
查看>>
HDU5807 Keep In Touch (BestCoder Round #86 D ) 分布式dp
查看>>
医保接口实现的基本流程
查看>>
pb数据窗口下拉数据窗口列的排序(翻译)
查看>>
Asp.net的__EVENTARGUMENT __EVENTTARGET一些参考网址
查看>>
2019春季第十二周作业
查看>>
Windows10无法打开NVIDA控制面板
查看>>
已经一周没有开锅了
查看>>
Ruby基础笔记
查看>>
oc38--类工厂方法在继承中
查看>>
oc75--不可变字典NSDictionary
查看>>
MySql安装与使用图文教程
查看>>
vue 数据传递的方法
查看>>
MFC 导入EXCEL到数据库
查看>>
[转载]Java同步、异步相关知识点
查看>>
洛谷 P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
查看>>