默认logging函数输出的warning级别的日志。
日志级别
日志级别大小关系为:CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET
logging库提供了多个组件:Logger、Handler、Filter、Formatter:
1 | Logger 对象提供应用程序可直接使用的接口,供应用代码使用; |
通过logging.basicConfig对日志的输出格式配置
cat test.log
需要注意的是
只有等级大于等于basicConfig定义的level的log才会被输出,比如这里定义的等级为DEBUG、debug、info、warning、error日志等级都大于等于debug
logging.basicConfig各参数
level:日志等级
format格式
1 | format: 指定输出的格式和内容,format可以输出很多有用信息,如上例所示: |
将日志同时输出到屏幕和文件
输出
logging 日志轮询
使用TimedRotatingFileHandler设置日志轮转,轮转的方式有两种一种是基于时间的轮转,一种是基于日志文件大小的轮转
TimedRotatingFileHandler函数参数说明
1 | logging.handlers.TimedRotatingFileHandler(file_name,when=时间单位, interval='时间间隔',backupCount="保留的文件个数") |
interval:表示等待多长时间文件重建,重建的文件名等于file_name+suffix
以下面例子说明
myadd.addHandler(filehandler)的意思是给myapp这个logger添加filehandler这个handler。
执行脚本可以看见每隔一秒会自动生成一个新的日志文件,到满3个时会自动进行一次新的轮转
TimedRotatingFileHandler设置的重建时间间隔后,suffix就需要按装下面的进行配置不然删除不了,比如设置的为S则suffix为%Y-%m-%d_%H-%M-%S
RotatingFileHandler安文件大小切分
logger实例的父子关系
通过前面几个例子对比你应该发现了前面我用logging.basicConfig()去设置format,后面我是通过getlogger创建一个logger后,通过setformat方法去给他对应的handler设置format。
root logger是处于最顶层的logger,同时也是默认的logger,如果不创建logger实例默认调用logger.info(),logger.debug(),logger.error()使用
如何得到root logger
通过logging.getLogger()和logging.getLogger(“”)得到root logger实例。
logger的父子关系
logger以name命名方式来表达父子关系
比如
父
logging.getLogger(foo)
子
logging.getLogger(foo.tar)
effective level
一个looger如果没有指定level,就继承父level,如果父logger也没有就直接继承root的level。
handler同样,子没有就继承父的,父也没有的话就继承root的
例
root logger这里没设置logger的setLevel默认是warning,但父logger设置了,所以父logger会将自己的logger setlevel传递给root logger
调用配置好的logging
正常写程序中只要配置好一个logging,其他程序只要调用他就可以了一种是通过logging.config,一种是通过模块导入
介绍方法二:
比如我将配置好的logging写在test.py里面
在另外一个程序中调用它
1 | import test |
这样输出的就是按test.py里面myapp这个logger配置好的log了
1 |
|