禁用特定包的日志记录

7 投票
1 回答
2871 浏览
提问于 2025-04-16 13:49

我正在我的应用程序中实现Python的日志记录功能,想要使用“默认”的根设置。我选择使用根设置是因为我不想在配置文件中为每个模块都定义一个日志记录器。

当我为根日志记录器开启DEBUG级别的日志记录时,我遇到了QPID Python客户端API的问题。我的日志文件被大量的qpid调试信息淹没了:

2011-03-16 09:16:18,664 - qpid.messaging.io.ops - DEBUG - SENT[8de6b2c]: ..

2011-03-16 09:16:18,667 - qpid.messaging.io.raw - DEBUG - ..

2011-03-16 09:16:18,668 - qpid.messaging.io.raw - DEBUG - READ[8de6b2c]: ..

2011-03-16 09:16:18,668 - qpid.messaging.io.ops - DEBUG - ..

等等……

所以我有两个主要问题:

1) 有没有办法只为我的模块启用日志记录,而不需要为每个模块定义一个日志记录器?换句话说,有没有办法共享“日志记录器设置”,这样我就不需要为每个日志记录器定义一个logger_部分,而是可以使用默认设置?

类似于:

[logger_shared_settings]
    loggers = logger_A,logger_B,logger_C,logger_D
    level=DEBUG

2) 或者我该如何通过配置文件过滤掉qpid包的日志记录?

这是log.conf文件:

[loggers]
keys=root

[handlers]
keys=consoleHandler,fileHandler,nullHandler

[formatters]
keys=simpleFormatter

[logger_root]
level=DEBUG
handlers=consoleHandler,fileHandler

[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)

[handler_fileHandler]
class=logging.handlers.RotatingFileHandler
level=DEBUG
formatter=simpleFormatter
args=('out.log',)

这是我想要避免的情况:

[loggers]
keys=root, a, b, c, d

[handlers]
keys=consoleHandler,fileHandler,nullHandler

[formatters]
keys=simpleFormatter

[logger_root]
level=ERROR
handlers=nullHandler


[logger_a]
level=DEBUG
handlers=consoleHandler,fileHandler


[logger_b]
level=DEBUG
handlers=consoleHandler,fileHandler

[logger_c]
level=DEBUG
handlers=consoleHandler,fileHandler

1 个回答

4

在python2.7中,你可以为qpid日志设置一个空处理器(NullHandler):

[logger_qpid]
level=NOTSET
handlers=nullHandler
qualname=qpid
propagate=0

撰写回答