python-logging

发布时间 2023-08-09 15:34:17作者: vmsysjack

# 1、记录器logger

#定义记录器
[loggers]
keys=root
#定义根记录器
[logger_root]
level=DEBUG
handlers=streamhandler,filehandler
#---------------------------------------------------------------------------------
# 2、 处理器handler
#定义所有处理器
[handlers]
keys=filehandler,streamhandler

#定义子处理器
[handler_streamhandler]
class=StreamHandler
level=DEBUG
formatter=streamformatter
args=(sys.stdout,)

#定义子处理器
[handler_filehandler]
class=FileHandler
level=ERROR
formatter=fileformatter
args=('file.log','a')
#---------------------------------------------------------------------------------
# 3、 格式化器formatter
#定义所有格式化器
[formatters]
keys=fileformatter,streamformatter

[formatter_fileformatter]
format=%(asctime)s - %(name)s - %(levelname)s - PID:%(process)s - %(message)s

[formatter_streamformatter]
format=%(asctime)s - %(name)s - %(levelname)s - PID:%(process)s - %(message)s

 

 

StreamHandler

创建方法: sh = logging.StreamHandler(stream=None)

FileHandler

创建方法: fh = logging.FileHandler(filename, mode='a', encoding=None, delay=False)

NullHandler

NullHandler类位于核心logging包,不做任何的格式化或者输出。
本质上它是个“什么都不做”的handler,由库开发者使用。

Formatter 格式化器

使用Formatter对象设置日志信息最后的规则、结构和内容,默认的时间格式为%Y-%m-%d %H:%M:%S。

创建方法: formatter = logging.Formatter(fmt=None, datefmt=None)

其中,fmt是消息的格式化字符串,datefmt是日期字符串。如果不指明fmt,将使用'%(message)s'。如果不指明datefmt,将使用ISO8601日期格式。

Filter 过滤器

Handlers和Loggers可以使用Filters来完成比级别更复杂的过滤。Filter基类只允许特定Logger层次以下的事件。例如用‘A.B’初始化的Filter允许Logger ‘A.B’, ‘A.B.C’, ‘A.B.C.D’, ‘A.B.D’等记录的事件,logger‘A.BB’, ‘B.A.B’ 等就不行。 如果用空字符串来初始化,所有的事件都接受。

创建方法: filter = logging.Filter(name='')

以下是相关概念总结:

熟悉了这些概念之后,有另外一个比较重要的事情必须清楚,即Logger是一个树形层级结构;
Logger可以包含一个或多个Handler和Filter,即Logger与Handler或Fitler是一对多的关系;
一个Logger实例可以新增多个Handler,一个Handler可以新增多个格式化器或多个过滤器,而且日志级别将会继承。