29

PythonのStreamHandlerロギングハンドラを使いたいです。私が試したことは、

import logging
import sys
mylogger = logging.getLogger("mylogger")
h1 = logging.StreamHandler(stream=sys.stdout)
h1.setLevel(logging.DEBUG)

mylogger.addHandler(h1)

# now trying to log with the created logger
mylogger.debug("abcd") # <no output>
mylogger.info("abcd") # <no output>
mylogger.warn("abcd") # abcd

何か足りないのですか?または何か間違っていますか?INFO および DEBUG レベルのログが STDOUT に出力されないのはなぜですか?

4

1 に答える 1

51

ハンドラーのレベルだけでなく、ロガーのレベルを設定する必要があります。

mylogger.setLevel(logging.DEBUG)

以下は、ロギング ワークフローの優れた図です。ロガーとハンドラーのいずれかがログ レベルをチェックしていることがわかります。

http://docs.python.org/2/howto/logging.html#logging-flow

デフォルトlogLevelWARNINGであるため、ハンドラーのレベルを に設定してもDEBUG、ロガーがメッセージを抑制するため、メッセージは通過しません (デフォルトでも ですWARNING)。

ところで、いくつかの基本的な書式設定を次のように行うことができますFormatter

import logging
import sys

mylogger = logging.getLogger("mylogger")

formatter = logging.Formatter('[%(levelname)s] %(message)s')

handler = logging.StreamHandler(stream=sys.stdout)
handler.setFormatter(formatter)
handler.setLevel(logging.DEBUG)

mylogger.addHandler(handler)
mylogger.setLevel(logging.DEBUG)

mylogger.debug("This is a debug message.")
mylogger.info("Some info message.")
mylogger.warning("A warning.")

出力を提供します

[DEBUG] This is a debug message.
[INFO] Some info message.
[WARNING] A warning.
于 2013-07-08T09:36:38.373 に答える