Formatters 可以用来控制日志输出的格式,参考下面的示例:
import logging # create logger logger = logging.getLogger('simple_example') logger.setLevel(logging.DEBUG) # create console handler and set level to debug ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) # create formatter formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') # add formatter to ch ch.setFormatter(formatter) # add ch to logger logger.addHandler(ch) # 'application' code logger.debug('debug message') logger.info('info message') logger.warn('warn message') logger.error('error message') logger.critical('critical message')输出如下:
2016-11-27 23:18:51,128 - simple_example - DEBUG - debug message 2016-11-27 23:18:51,128 - simple_example - INFO - info message 2016-11-27 23:18:51,128 - simple_example - WARNING - warn message 2016-11-27 23:18:51,128 - simple_example - ERROR - error message 2016-11-27 23:18:51,128 - simple_example - CRITICAL - critical message可以看到 %(asctime)s - %(name)s - %(levelname)s - %(message)s 这里对格式化输出的影响。
其中默认的日期时间显示的格式是ISO8601格式, 也可以自定义时间格式,如下面的例子:
输出:
python test12.py 11/27/2016 11:22:41 PM is when this event was logged.好有个比较有用的格式化参数时 %(lineno)d, 显示logger调用的时候所处的行数。具体的格式和作用可以参见。
其它 logger.exception以 ERROR 的等级记录日志,但和 DEBUG 等级一样会输出详细的错误信息,通常用在exception处理中
Filter ObjectFilters 是可以被handlers和loggers用来过滤日志的输出的,因为用的不多,具体可参见。
线程安全logging模块是通过线程锁保证线程安全的。
Logging Flow官方文档上看到的logging流程图,可以帮助理解日志记录流程,参见。
从配置文件获取logging的配置参见。