Python Logging模块
本文最后更新于:2021年10月22日 下午
Python Logging类
Python的Logging类是专门成立程序日志的类,能够方便的输出日志到屏幕、文件等多个地方,能够方便控制如何输出,还能够设置消息级别。
- Logging.Logger:Logger是Logging模块的主体,为程序提供记录日志接口、判断级别、分配给handler。这个对象不能实例,应该通过getLogger()来获取。
- Logging.Handler:Handler基于日志级别对日志进行分发,如设置为WARNING级别的Handler只会处理WARNING及以上级别的日志。
- Logging.Filter:Filter是过滤器,可以提供更高级的自定义过滤方式。
- Logging.Formatter: 这个类处理输出格式
日志级别
级别排序: CRITICAL > ERROR > WARNING > INFO > DEBUG
使用方法如下
1 |
|
默认只显示WARING级别以上。下面代码实现自定义输出级别:
1 |
|
注意!:This function does nothing if the root logger already has handlers configured, unless the keyword argument force is set to True
.
若不使用force参数,则设置输出级别只有第一次有效。force=true
能在执行其他参数指定的配置之前,将移除并关闭附加到根记录器的所有现有处理器。
有一个特殊的日志输出:
1 |
|
设置输出格式
格式有以下几种
- %(levelno)s: 打印日志级别的数值
- %(levelname)s: 打印日志级别名称
- %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
- %(filename)s: 打印当前执行程序名,如:login.py
- %(funcName)s: 打印日志的当前函数
- %(lineno)d: 打印日志的当前行号,在第几行打印的日志
- %(asctime)s: 打印日志的时间
- %(thread)d: 打印线程ID
- %(threadName)s: 打印线程名称
- %(process)d: 打印进程ID
- %(message)s: 打印日志信息
1 |
|
注意输出格式在Windows下和Linux下都要符合命名规则。
日志输出到文件和控制台
接下来是高级用法
1 |
|
logging.getLogger()
这个方法返回一个Logger对象,参数是Logger的名字,get相同名字会返回相同的logger,在不同模块要调用logger的时候永远都不需要传递logger参数,只需要使用这个方法即可。
示例:logging,getLogger("hahahaha")
Logger的名字可以体现继承关系,用.
来分隔,子logger继承父logger的配置。
1 |
|
logging.Filter
需要定义一个新的类来自定义过滤规则
1 |
|
record是logging.LogRecord类,有以下属性:
-
name logger的名字
-
levelno是级别
-
levelname是级别的字符串
-
pathname 是哪个文件输出的这行日志
-
lineno 是行号
-
msg 是日志本身
-
除此以外还有formatter格式化字符串的所有属性
参考资料
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!