使用 fileConfig 在 Python 中配置自定义处理程序

Dav*_*cía 4 python logging python-3.x

我正在使用配置文件在 Python 应用程序中配置我的记录器。这是文件:

[loggers]
keys=root

[logger_root]
level=INFO
handlers=console

[handlers]
keys=console,file_rotating

[handler_console]
class=StreamHandler
level=WARNING
formatter=console
args=(sys.stderr,)

[handler_file_rotating]
class=TimeRotatingFileHandler
level=DEBUG
formatter=file
args=('../logs/twicker.log', 'd', 1, 5)

[formatters]
keys=console,file

[formatter_console]
format=%(levelname)s - %(message)s

[formatter_file]
format=%(asctime)s - %(levelname)s - %(module)s - %(message)s
Run Code Online (Sandbox Code Playgroud)

我的问题是 TimeRotatingFileHandler。每次运行该应用程序时,都会出现下一个错误:

导入错误:没有名为“TimeRotatingFileHandler”的模块

我做错了什么?我也尝试将类行更改为,class=handlers.TimeRotatingFileHandler但在这种情况下,我收到下一个错误:

导入错误:没有名为“处理程序”的模块

Vin*_*jip 6

class=在的命名空间进行评估logging模块,默认情况下,这并不有一个结合handlers。所以你可以这样做

import logging, logging.handlers
logging.handlers = logging.handlers
Run Code Online (Sandbox Code Playgroud)

在调用之前fileConfig(),然后class=handlers.TimedRotatingHandler应该可以工作。


lab*_*oid 5

我在使用时遇到了同样的问题dictConfig对我来说,解决方案是完全限定模块路径,如下所示:

[handler_file_rotating]
class=logging.handlers.TimeRotatingFileHandler
level=DEBUG
formatter=file
args=('../logs/twicker.log', 'd', 1, 5)
Run Code Online (Sandbox Code Playgroud)

你可能想试一试