logging模块的四个重点:
logger:日志生产者
handler:日志接收处理者(logger生产日志送给handler)
formatter:日志格式化(在handler接收到日志后需要绑定format日志格式处理)
filter:暂时略过
在日志配置文件如何定义logger,handler,formatter?
loggers:keys关联多个logger,其中root为必须(loggers与logger)
level:日志级别
handler:处理后输出位置
qualname:定义logger对象是需要绑定的日志策略名字
progarate:是否将日志传给上游(多级上游,顶级为root,以foo.A.B类似表示,foo就是A,B的顶级,A就是B的父级)
....
handlers:keys关联多个定义的handler
class:日志输出位置,StreamHandler,FileHandler,.......
level:日志级别
formatter:日志格式
args:日志处理对象的参数,比如StreamHandler输出参数可以是sys.stdout,必须是元组格式
formatters:关联多个定义了的formatter
format:日志格式
datefmt:时间格式
日志格式定义:
%(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: 打印日志信息
配置文件定义:
loggers关联多个logger,formatters关联多个formatter,handlers关联多个handler
logger关联handler,handler定义输出与关联formatter
配置案例:
定义日志策略:
[loggers]
keys=root,l1,l2,l3
[handlers]
keys=h1,h2,h3
[formatters]
keys=f1,f2,f3
[logger_root]
level=NOTSET
handlers=h1
[logger_l1]
level=DEBUG
handlers=h1
qualname=h1
progarate=1
[logger_l2]
level=INFO
handlers=h2
qualname=h2
progarate=0
[logger_l3]
level=ERROR
handlers=h3
qualname=h3
progarate=0
[handler_h1]
class=StreamHandler
level=NOTSET
formatter=f1
args=(sys.stdout,)
[handler_h2]
class=FileHandler
level=INFO
formatter=f2
args=('l2h2f2.txt','a')
[handler_h3]
class=FileHandler
level=ERROR
formatter=f3
args=('l3h3f3.txt','a')
[formatter_f1]
format='%(levelno)s - %(levelname)s - %(pathname)s - %(filename)s - %(funcName)s - %(lineno)d - %(thread)d - %(threadName)s - %(process)d - %(message)s'
[formatter_f2]
format='%(levelno)s - %(pathname)s - %(filename)s - %(funcName)s - %(lineno)d - %(thread)d - %(threadName)s - %(process)d - %(message)s'
[formatter_f3]
format='%(levelno)s - %(filename)s - %(funcName)s - %(lineno)d - %(thread)d - %(threadName)s - %(process)d - %(message)s'
代码定义日志:
import logging
import logging.config
logging.config.fileConfig('logging1.ini')
# logger1 = logging.getLogger('h1')
# logger1.debug('debug message')
# logger1.info('info message')
# logger1.warning('warning message')
# logger1.error('error message')
# logger1.critical('critical message')
logger2 = logging.getLogger('h2')
logger2.debug('debug message')
logger2.info('info message')
logger2.warning('warning message')
logger2.error('error message')
logger2.critical('critical message')
logger3 = logging.getLogger('h3')
logger3.debug('debug message')
logger3.info('info message')
logger3.warning('warning message')
logger3.error('error message')
logger3.critical('critical message')
网友评论