1

如何在不知道其记录器名称的情况下使类的日志记录静音?有问题的课程是qualysconnect

import logging
import qualysconnect.util

# Set log options. This is my attempt to silence it.
logger_qc = logging.getLogger('qualysconnect')
logger_qc.setLevel(logging.ERROR)
# Define a Handler which writes WARNING messages or higher to the sys.stderr
logger_console = logging.StreamHandler()
logger_console.setLevel(logging.ERROR)
# Set a format which is simpler for console use.
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
# Tell the handler to use this format.
logger_console.setFormatter(formatter)
# Add the handler to the root logger
logging.getLogger('').addHandler(logger_console)

# 'application' code
logging.debug('debug message')
logging.info('info message')
logging.warn('warn message')
logging.error('error message')
logging.critical('critical message')

import qualysconnect.util注释掉时输出:

root        : ERROR    error message
root        : CRITICAL critical message

输出时import qualysconnect.util保存在:

WARNING:root:warn message
ERROR:root:error message
root        : ERROR    error message
CRITICAL:root:critical message
root        : CRITICAL critical message
4

1 回答 1

0

可悲的是,由于他们没有为他们的记录器定义一个名称,而且qualysconnect.util他们甚至不进行getLogger调用或getChild调用,所以你不能在一个不会影响整个模块的日志记录行为的情况下做一些事情而不会弄脏。

我能想到的唯一干净的选择是将他们处理日志记录的方式报告为错误,并提交一个补丁请求,您可以在其中修改qualysconnect.util日志记录语句,例如:

import logging
logger = logging.getLogger('qualysconnect').getChild('util')

logging.info()并将所有, ...替换logging.debug()logger.info(), logger.debug()...

肮脏的选项:您可以猴子修补qualysconnect.util模块,以便将其logging对象替换为记录器对象:

import qualysconnect.util
logger_qc = logging.getLogger('qualysconnect')
logger_qc.setLevel(logging.ERROR)
qualysconnect.util.logging = logger_qc.getLogger('qualysconnect').getChild('util')
qualysconnect.util.logging.disable(logging.CRITICAL) # will disable all logging for CRITICAL and below

当您向上游项目发送补丁请求时,这可能是一个有效的解决方案,但肯定不是一个长期有效的解决方案。

或者您可以简单地关闭整个qualysconnect模块的所有注销,但我认为这不是您想要的。

于 2013-06-21T15:22:48.923 回答