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も呼び出しもしていないため、モジュール全体のロギング動作に影響を与えずに何かを行うことはできません。getLoggergetChild

私が考えることができる唯一のクリーンなオプションは、ロギングをバグとして処理する方法を報告し、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 に答える