这是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=
对应关系:
各参数解读
[loggers]
logger提供了应用程序可以直接使用的接口,logger里面的每一个keys在下面还要写一个块,用来单独的配置;
[logger_name]
定义logger模块,必须包含一个名字叫做root的logger,root是父类,必需存在的,其它的是自定义。
level:日志级别
handler:处理后输出的位置
qualname:定义logger对象是需要绑定的日志策略名字
progarate:是否将日志传给上游(多级上游,顶级为root,以foo.A.B类似表示,foo就是A,B的顶级,A就是B的父级)
部分中的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 | 用户输出的消息 |
参考:
python logging模块使用教程
Python 日志模块logging详解
python之logging的文件配置
python logging文件配置示例