sys.stdoutにメッセージを記録しようとしていますが、独自の関数を使って同じフォーマットを設定しています。ファイルにログインするか、関数の外に出ると、すべてが期待通りに機能します。私は私の関数にメッセージを送信すると、私は重複を取得:Pythonロギングでログメッセージが複製される
def log(lvl, msg):
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(levelname)-8s %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
filename='/tmp/test.log',
filemode='a')
console = logging.StreamHandler(sys.stdout)
console.setLevel(logging.INFO)
formatter = logging.Formatter('%(levelname)-8s %(message)s')
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)
logging.log(lvl, "%s: %s" % (options.build_node, msg))
if __name__ == "__main__":
print "Executing outside of the function"
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(levelname)-8s %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
filename='/tmp/test.log',
filemode='a')
console = logging.StreamHandler(sys.stdout)
console.setLevel(logging.INFO)
formatter = logging.Formatter('%(levelname)-8s %(message)s')
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)
logging.log(logging.INFO, "some message")
logging.log(logging.ERROR, "some error message")
logging.log(logging.WARN, "Warning message")
logging.log(logging.INFO, "another info message")
print "\nNow calling the log function"
log(logging.INFO, "some message")
log(logging.ERROR, "some error message")
log(logging.WARN, "Warning message")
log(logging.INFO, "another info message")
そして私が手出力は次のようになります。
Executing outside of the function
INFO some message
ERROR some error message
WARNING Warning message
INFO another info message
Now calling the log function
INFO None: some message
INFO None: some message
ERROR None: some error message
ERROR None: some error message
ERROR None: some error message
WARNING None: Warning message
WARNING None: Warning message
WARNING None: Warning message
WARNING None: Warning message
INFO None: another info message
INFO None: another info message
INFO None: another info message
INFO None: another info message
INFO None: another info message
とログファイルの内容が期待されているとおり
2016-05-10 09:38:15 INFO some message
2016-05-10 09:38:15 ERROR some error message
2016-05-10 09:38:15 WARNING Warning message
2016-05-10 09:38:15 INFO another info message
2016-05-10 09:38:15 INFO None: some message
2016-05-10 09:38:15 ERROR None: some error message
2016-05-10 09:38:15 WARNING None: Warning message
2016-05-10 09:38:15 INFO None: another info message
I私のlog(lvl、msg)関数で何が間違っているのかを知ることはできません。 何かが、各呼び出しで重複してメッセージをstdoutに伝播させます。 私は何が欠けていますか?事前