logging的日志分为5个级别分别为debug(), info(), warning(), error(), critical()
先来看一下简单的代码:
logging.basicConfig(filename='example.log', level=logging.INFO, format='%(asctime)s %(message)s', datefmt='%Y-%m-%d %H:%M:%S') logging.warning('is when this event was logged.')
filename 是指日志文件的名称,可以带上路径,代码中是当前目录下的example.log文件;level是指info以上级别的日志,format就是格式化日志了:以‘日期时间 日志内容’的格式记录, datafmt就是格式化日志中的时间。
logging.warnging() 是将一条warning日志写入日志, 打开example.log日志看一下:
2016-03-02 12:17:41 is when this event was logged. 2016-03-22 11:34:51 is when this event was logged.
看到日志已经成功记录,而且格式都是指定的格式。
而更多的时候,我们不只是将日志记录到文件这么简单,我们需要的是将日志记录到文件的同时输出到屏幕上:
#创建logger logger = logging.getLogger("TEST-LOG") #这里的TEST-lOG在后面会用到,这个是自定义的 logger.setLevel(logging.DEBUG) #全局的日志级别 #创建屏幕输出 ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) #屏幕输出的级别 #创建文件处理和级别 fh = logging.FileHandler("access.log") #日志文件 fh.setLevel(logging.WARNING) #写入日志的级别 #创建日志格式 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') #name就是TEST-LOG #添加格式 ch.setFormatter(formatter) fh.setFormatter(formatter) #添加ch, fh到logger logger.addHandler(ch) logger.addHandler(fh) #写入日志 logger.debug("debug message") logger.info('info message') logger.warn('warn message') logger.error('error message') logger.critical('critical message')
在上面代码中,有一个全局的日志级别,而屏幕和文件各自又定义了自己的日志级别,那是以哪个为准呢? 经过我的测试,我的理解是这样的:
5个级别的日志debug, info, waring,error, criticcal, 级别越高就越严重,谁的级别高就按谁的来。