Python之日志处理(logging模块)(3)

五、使用logging四大组件记录日志

现在,我们对logging模块的重要组件及整个日志流处理流程都应该有了一个比较全面的了解,下面我们来看一个例子。

1. 需求

现在有以下几个日志记录的需求:

1)要求将所有级别的所有日志都写入磁盘文件中

2)all.log文件中记录所有的日志信息,日志格式为:日期和时间 - 日志级别 - 日志信息

3)error.log文件中单独记录error及以上级别的日志信息,日志格式为:日期和时间 - 日志级别 - 文件名[:行号] - 日志信息

4)要求all.log在每天凌晨进行日志切割

2. 分析

1)要记录所有级别的日志,因此日志器的有效level需要设置为最低级别--DEBUG;

2)日志需要被发送到两个不同的目的地,因此需要为日志器设置两个handler;另外,两个目的地都是磁盘文件,因此这两个handler都是与FileHandler相关的;

3)all.log要求按照时间进行日志切割,因此他需要用logging.handlers.TimedRotatingFileHandler; 而error.log没有要求日志切割,因此可以使用FileHandler;

4)两个日志文件的格式不同,因此需要对这两个handler分别设置格式器;

3. 代码实现 import logging import logging.handlers import datetime logger = logging.getLogger('mylogger') logger.setLevel(logging.DEBUG) rf_handler = logging.handlers.TimedRotatingFileHandler('all.log', when='midnight', interval=1, backupCount=7, atTime=datetime.time(0, 0, 0, 0)) rf_handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")) f_handler = logging.FileHandler('error.log') f_handler.setLevel(logging.ERROR) f_handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(filename)s[:%(lineno)d] - %(message)s")) logger.addHandler(rf_handler) logger.addHandler(f_handler) logger.debug('debug message') logger.info('info message') logger.warning('warning message') logger.error('error message') logger.critical('critical message')

all.log文件输出

2017-05-13 16:12:40,612 - DEBUG - debug message 2017-05-13 16:12:40,612 - INFO - info message 2017-05-13 16:12:40,612 - WARNING - warning message 2017-05-13 16:12:40,612 - ERROR - error message 2017-05-13 16:12:40,613 - CRITICAL - critical message

error.log文件输出

2017-05-13 16:12:40,612 - ERROR - log.py[:81] - error message 2017-05-13 16:12:40,613 - CRITICAL - log.py[:82] - critical message 六、配置logging的几种方式

作为开发者,我们可以通过以下3中方式来配置logging:

具体说明请参考另一篇博文《Python之配置日志的几种方式》

七、向日志输出中添加上下文信息

除了传递给日志记录函数的参数外,有时候我们还想在日志输出中包含一些额外的上下文信息。比如,在一个网络应用中,可能希望在日志中记录客户端的特定信息,如:远程客户端的IP地址和用户名。这里我们来介绍以下几种实现方式:

通过向日志记录函数传递一个extra参数引入上下文信息

使用LoggerAdapters引入上下文信息

使用Filters引入上下文信息

具体说明请参考另一篇博文《Python之向日志输出中添加上下文信息》

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/6cd43e5bd00e0f7751ed681bb61d1d55.html