这是python官方指南的通过ini配置日志的例子:
日志配置
代码如下:
[loggers]
keys=root,simpleExample
[handlers]
keys=consoleHandler
[formatters]
keys=simpleFormatter
[logger_root]
level=DEBUG
handlers=consoleHandler
[logger_simpleExample]
level=DEBUG
handlers=consoleHandler
qualname=simpleExample
propagate=0
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)
[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=
对应关系:
image.png
各参数解读
[loggers]
logger提供了应用程序可以直接使用的接口,logger里面的每一个keys在下面还要写一个块,用来单独的配置;
[logger_name]
定义logger模块,必须包含一个名字叫做root的logger,root是父类,必需存在的,其它的是自定义。
level:日志级别
handler:处理后输出的位置
qualname:定义logger对象是需要绑定的日志策略名字
progarate:是否将日志传给上游(多级上游,顶级为root,以foo.A.B类似表示,foo就是A,B的顶级,A就是B的父级)
name的部分是在
image.png
部分中的keys的定义的
在应用程序中,使用无参函数logging.getLogger()时,默认返回root这个logger,其他自定义logger可以通过 logging.getLogger("name") 方式进行调用。
[handlers]
handler将(logger创建的)日志记录发送到合适的目的输出,handler里面的每一个keys也是要在下面还要写一个块,用来单独的配置;
[handler_name]
Handler处理器类型比较常用的有三个,StreamHandler,FileHandler,NullHandler
参考:Python 模块之Logging(四)——常用handlers的使用
[formatters]
formatter决定日志记录的最终输出格式,formatter里面的每一个keys在下面还要写一个块,用来单独的配置,可以有多个keys,配置多个格式。
[formatter_name]
格式
含义
%(name)s
Logger的名字
%(levelno)s
数字形式的日志级别
%(levelname)s
文本形式的日志级别
%(pathname)s
调用日志输出函数的模块的完整路径名,可能没有
%(filename)s
调用日志输出函数的模块的文件名
%(module)s
调用日志输出函数的模块名
%(funcName)s
调用日志输出函数的函数名
%(lineno)d
调用日志输出函数的语句所在的代码行
%(created)f
当前时间,用UNIX标准的表示时间的浮 点数表示
%(relativeCreated)d
输出日志信息时的,自Logger创建以 来的毫秒数
%(asctime)s
字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
%(thread)d
线程ID。可能没有
%(threadName)s
线程名。可能没有
%(process)d
进程ID。可能没有
%(message)s
用户输出的消息