Python日志劫持子模块日志到另一个文件(Pylons)

0 投票
1 回答
800 浏览
提问于 2025-04-16 11:59

我有一个叫做 myapp 的 Pylons 应用程序,我希望从一个子模块 myapp.lib.submodule 中的所有日志信息都写入一个不同的日志文件,而不是同时写入主日志文件。

这是我现在的 ini 文件,这样设置的话,我会在两个日志文件中都看到子模块的消息,分别是 accesslog 和 submodulelog:

...
# Logging configuration
[loggers]
keys = root, routes, myapp, sqlalchemy, submodule

[handlers]
keys = console, accesslog, submodulelog

[formatters]
keys = generic

[logger_root]
level = INFO
handlers = accesslog

[logger_routes]
...

[logger_myapp]
level = INFO
handlers = accesslog
qualname = myapp.controllers

[logger_submodule]
level = INFO
handlers = submodulelog
qualname = myapp.lib.submodule

[logger_sqlalchemy]
....

[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic

[handler_accesslog]
class = handlers.TimedRotatingFileHandler
args = ('/tmp/myapp.log', 'midnight', 1, 30, 'utf-8')
level = INFO
formatter = generic

[handler_submodulelog]
class = handlers.TimedRotatingFileHandler
args = ('/tmp/submodule.log', 'midnight', 1, 30, 'utf-8')
level = INFO
formatter = generic

[formatter_generic]
....

1 个回答

2

你可以使用传播标志来控制子模块的日志记录,这样就可以阻止消息传递给上级的日志记录器,方法如下:

[logger_submodule]                                                                                                                                           
level = INFO                                                                                                                                                 
handlers = submodulelog                                                                                                                                      
qualname = myapp.lib.submodule                                                                                                                               
propagate=0

撰写回答