Python开发之日志记录模块:logging(5)

Handler实例用于将日志记录发送到指定的位置进行输出。一个logger对象可以添加多个handler(例如既要在控制台输出日志,又要将日志写入到文件A,还要讲日志写入文件B,这就可以配置3个handler),每个handler又可以定义不同日志级别,以实现日志分级过滤显示。常用的方法包括:

handler.setLevel():设置handler处理的日志信息最低级别

handler.setFormatter():为handler设置一个格式器对象

handler.addFilter():为handler添加一个过滤器对象

handler.removeFilter():为handler删除一个过滤器对象

要注意的是,在实际开发中,最好不要直接使用Handler类,应根据实际的功能需要,实例化Handler类的子类。Handler类的之类包括:

Handler

 

描述

 

logging.StreamHandler

 

将日志消息发送到输出到Stream,如std.out, std.err或任何file-like对象。

 

logging.FileHandler

 

将日志消息发送到磁盘文件,默认情况下文件大小会无限增长

 

logging.handlers.RotatingFileHandler

 

将日志消息发送到磁盘文件,并支持日志文件按大小切割

 

logging.hanlders.TimedRotatingFileHandler

 

将日志消息发送到磁盘文件,并支持日志文件按时间切割

 

logging.handlers.HTTPHandler

 

将日志消息以GET或POST的方式发送给一个HTTP服务器

 

logging.handlers.SMTPHandler

 

将日志消息发送给一个指定的email地址

 

logging.NullHandler

 

该Handler实例会忽略error messages,通常被想使用logging的library开发者使用来避免'No handlers could be found for logger XXX'信息的出现。

 

通过代码来演示一下,功能如下:在控制台输出日志(日志级别为debug),同时将日志写入到文件a.log文件(日志级别为debug),还要讲日志写入文件b.log文件(日志级别为warn):

import logging logger = logging.getLogger() logger.setLevel(logging.DEBUG) # 控制台输出 con_handler = logging.StreamHandler() con_handler.setLevel(logging.INFO) logger.addHandler(con_handler) # 输出到文件a.log file_a_handler = logging.FileHandler('./a.log', encoding='UTF-8') file_a_handler.setLevel(logging.DEBUG) logger.addHandler(file_a_handler) # 输出到文件b.log file_b_handler = logging.FileHandler('./b.log', encoding='UTF-8') file_b_handler.setLevel(logging.WARNING) logger.addHandler(file_b_handler) if __name__=='__main__': logger.debug('debug msg') logger.info('info msg') logger.warning('warn msg')

运行上面代码后,控制台输出如下:

info msg

warn msg

文件a.log会写入一下内容:

debug msg

info msg

warn msg

文件b.log会写入以下内容:

warn msg

注意:在一个日志器中添加多个handler时要注意,最好通过logger.setLevel(logging.DEBUG)先设置一下logger本身的日志级别,如果某个handler的级别比logger的日志级别低,那么该handler的日志级别无效,handler会以logger的级别来处理。

(3)格式器:Formatter

Formatter类实例用于配置日志记录的内容、结构等信息。可以通过以下三个参数进行配置:

fmt:指定消息格式化字符串,如果不指定该参数则默认使用message的原始值

datefmt:指定日期格式字符串,如果不指定该参数则默认使用"%Y-%m-%d %H:%M:%S"

style:指定格式化占位符,可取值为 '%', '{'和 '$',如果不指定该参数则默认使用'%'

fmt的使用方法可以参照上文中介绍过的logging.basicConfig函数format参数的配制方法。

例:每条日志输出日志时间、日制定及、所在模块名、函数名、行号等信息,并指定时间输出格式,最后把日志输出到控制台。代码如下:

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

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