python logging模块学习
logging模块当中,记录到log的信息等级划分:从低到高
调试(debug)、信息(info)、警告(warning)、错误(error)和严重错误(critical)
logging模块提供了两种记录日志的方式:
第一种:使用logging提供的模块级别的函数,默认级别是warning
使用logging的basicConfig函数能够进行一些常用的设置,如日志等级,输入信息,日志文件路径等。
logging.basicConfig()函数参数说明
filename 指定日志输出目标文件的文件名(可以写文件名也可以写文件的完整的绝对路径,写文件名日志放执行文件目录下,写完整路径按照完整路径生成日志文件),指定该设置项后日志信心就不会被输出到控制台了
filemode 指定日志文件的打开模式,默认为'a'。需要注意的是,该选项要在filename指定时才有效
format 指定日志格式字符串,即指定日志输出时所包含的字段信息以及它们的顺序。logging模块定义的格式字段下面会列出。
datefmt 指定日期/时间格式。需要注意的是,该选项要在format中包含时间字段%(asctime)s时才有效
level 指定日志器的日志级别
stream 指定日志输出目标stream,如sys.stdout、sys.stderr以及网络stream。需要说明的是,stream和filename不能同时提供,否则会引发 ValueError异常
style Python 3.2中新添加的配置项。指定format格式字符串的风格,可取值为'%'、'{'和'$',默认为'%'
handlers Python 3.3中新添加的配置项。该选项如果被指定,它应该是一个创建了多个Handler的可迭代对象,这些handler将会被添加到root logger。需要说明的是:filename、stream和handlers这三个配置项只能有一个存在,不能同时出现2个或3个,否则会引发ValueError异常。
相关文档中,关于format信息格式如下
import logging
logging.basicConfig(level=logging.INFO,format=' %(name)s|%(asctime)s|%(levelname)s|%(message)s',filename=r'./test.log')
logging.info('lalalla')
第二种:日志流处理流程
import logging
logging.basicConfig(level=logging.INFO,format=' %(name)s|%(asctime)s|%(levelname)s|%(message)s',
filename=r'./test.log')
logging.info('lalalla')
logging.basicConfig(level=logging.INFO,format=' %(name)s|%(asctime)s|%(levelname)s|%(message)s',
filename=r'./test1.log')
logging.info('lalalla111111111')
可看到,一次指定两个log存储文件时,有一个是失效的,并且信息都输入到第一个指定的log文件中。所以需要使用logging.getLogger([name]).没有指定名字将返回root logger
日志模块四大组件
日志器Logger
提供了应用程序可一直使用的接口,记录产生的日志。
处理器Handler
将logger创建的日志记录发送到合适的目的输出,日志器logger进行设置,不同的处理器(handler)可以将日志输出到不同的位置,
过滤器Filter
每个处理器(handler)都可以设置自己的过滤器(filter)实现日志过滤,决定输出哪条日志记录,丢弃哪条日志记录
格式器Formatter
决定日志记录的最终输出格式,每个处理器(handler)都可以设置自己的格式器(formatter)实现同一条日志以不同的格式输出到不同的地方。
日志大概流程:logger记录器产生的日志记录通过Handler处理器,发送到合适位置,filter过滤器决定输出那些记录,丢弃哪条日志记录,formatter 格式化器指明输出日志内容的格式布局。
四大组件对应的四大类Logger, Handler, Filter, Formatter
Logger类:
暴露方法,记录程序运行时产生的日志信息;过滤设置,决定要对哪些日志进行后续处理;将日志消息传送给所有设置好的日志handlers。
logger = logging.getLogger(log_filename),多次调用getLogger()方法,但log_filename参数相同,将会返回指向同一个logger对象的引用。
常用配置方法:
Logger.setLevel() 设置日志器将会处理的日志消息的最低严重级别,默认是warning,如果需要更低等级的日志信息,需要进行设置。不然后面handler设置成info或者debug也是没有日志记录的。
Logger.addHandler() 和 Logger.removeHandler() 为该logger对象添加 和 移除一个handler对象
Logger.addFilter() 和 Logger.removeFilter() 为该logger对象添加 和 移除一个filter对象
Handler类
指定日志信息的分发目的,是输入到控制台,还是输入到文件中等等。
Handler.setLevel(lel):指定被处理的信息级别,低于lel级别的信息将被忽略,logger中低于此级别的日志信息也不会输出指定目的。
Handler.setFormatter():给这个handler选择一个格式
Handler.addFilter(filt)、Handler.removeFilter(filt):新增或删除一个filter对象
formater类
logging.Formatter.__init__(fmt=None, datefmt=None, style='%')
fmt:指定消息格式化字符串,如果不指定该参数则默认使用message的原始值
datefmt:指定日期格式字符串,如果不指定该参数则默认使用"%Y-%m-%d %H:%M:%S"
style:Python 3.2新增的参数,可取值为 '%', '{'和 '$',如果不指定该参数则默认使用'%'
Filter类
Filter可以被Handler和Logger用来做比level更细粒度的、更复杂的过滤功能。Filter是一个过滤器基类,它只允许某个logger层级下的日志事件通过过滤。该类定义如下:
classlogging.Filter(name='')
filter(record)
Filter类详情实例可参考:https://www.jb51.net/article/177134.htm