7

次のコードを使用して、警告をログに記録しました。

import logging
logging.captureWarnings(True)
formatter = logging.Formatter('%(asctime)s\t%(levelname)s\t%(message)s')
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
console_handler.setFormatter(formatter)

これは機能しますが、私のロギングフォーマッターは適用されず、警告は次のように表示されます。

WARNING:py.warnings:/home/joakim/.virtualenvs/masterload/local/lib/python2.7/site-packages/MySQL_python-1.2.3c1-py2.7-linux-x86_64.egg/MySQLdb/cursors.py:100: Warning: 
InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_per_table.

予想される形式の代わりに:

2012-11-12 18:19:44,421 INFO    START updating products

キャプチャされた警告メッセージに通常のフォーマットを適用するにはどうすればよいですか?

4

3 に答える 3

6

logging.captureWarnings、という名前のロガーにログを記録するpy.warningsため、ハンドラーをそのロガーに追加する必要があります。

import logging

logging.captureWarnings(True)
formatter = logging.Formatter('%(asctime)s\t%(levelname)s\t%(message)s')
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
console_handler.setFormatter(formatter)
py_warnings_logger = logging.getLogger('py.warnings')
py_warnings_logger.addHandler(console_handler)
于 2012-11-12T17:57:49.697 に答える
6

ハンドラーを作成しましたが、それを使用するようにロギング モジュールを構成していません。

console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
console_handler.setFormatter(formatter)

このハンドラーをロガーに追加する必要があります。たとえば、ルートロガー:

logging.getLogger().addHandler(console_handler)

または、ハンドラーを警告ロガーのみに追加することもできます。captureWarnings()ドキュメントには、py.warningsキャプチャされた警告に使用すると記載されています。

logging.getLogger('py.warnings').addHandler(console_handler)

ハンドラーとフォーマッターを明示的に作成する代わりに、呼び出しbasicConfig()てルート ロガーを構成することもできます。

logging.basicConfig(format='%(asctime)s\t%(levelname)s\t%(message)s', level=logging.DEBUG)

上記の基本構成は、設定したハンドラー構成と道徳的に同等です。

于 2012-11-12T18:08:04.133 に答える
0

ドキュメントには、キャプチャがTrueの場合、警告モジュールによって発行された警告がログシステムにリダイレクトされると記載されています。具体的には、warnings.formatwarning()を使用して警告がフォーマットされ、結果の文字列が重大度WARNINGの「py.warnings」という名前のロガーに記録されます。

したがって、私はしようとします

# get the 'py.warnings' logger
log = logging.getLogger('py.warnings')
# assign the handler to it
log.addHandler(console_handler)
于 2012-11-12T17:58:49.033 に答える