禁用特定包的日志记录。

7
我正在应用程序中实现Python日志记录,并希望能够利用“默认”根设置。 我想使用根设置,因为我不想在配置文件中为每个模块定义一个记录器。
当我为根记录器启用DEBUG级别记录时,我遇到了QPID Python Client 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,您可以将NullHandler设置为qpid记录器:

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

嗯...什么是“共享设置”? - oxyum
有点像根记录器,但是是一个不同的部分,我可以将其应用于我的应用程序中的模块。 - Nix
这是不可能的,因为日志记录器具有分层结构,但我猜,在Python2.7中,您可以尝试基于logging模块的dictConfig功能创建自己的配置。 - oxyum
添加空处理程序到子记录器是如何防止根记录器显示日志消息的? - variable
需要处理程序,因此将其设置为nullHandler,实际工作由“propagate”参数完成。 - oxyum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接