588

loggingモジュールを使用て Python ロギングを行う方法はありますか? たとえば、 、logger.warninglogger.criticalへのすべての呼び出しをlogger.error目的の場所に移動するだけでなく、常に にコピーしたいと考えていstdoutます。これは、次のようなメッセージの重複を避けるためです。

mylogger.critical("something failed")
print "something failed"
4

10 に答える 10

797

ログ出力はすべてハンドラによって処理されます。logging.StreamHandler()ルートロガーに a を追加するだけです。

stdoutストリーム ハンドラーを構成し (デフォルトの代わりに使用stderr)、ルート ロガーに追加する例を次に示します。

import logging
import sys

root = logging.getLogger()
root.setLevel(logging.DEBUG)

handler = logging.StreamHandler(sys.stdout)
handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
root.addHandler(handler)
于 2012-12-27T17:12:56.517 に答える
673

stdout にログを記録する最も簡単な方法:

import logging
import sys
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
于 2015-01-28T14:39:03.627 に答える
77

複数のハンドラーを使用することは可能です。

import logging
import auxiliary_module

# create logger with 'spam_application'
log = logging.getLogger('spam_application')
log.setLevel(logging.DEBUG)

# create formatter and add it to the handlers
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# create file handler which logs even debug messages
fh = logging.FileHandler('spam.log')
fh.setLevel(logging.DEBUG)
fh.setFormatter(formatter)
log.addHandler(fh)

# create console handler with a higher log level
ch = logging.StreamHandler()
ch.setLevel(logging.ERROR)
ch.setFormatter(formatter)
log.addHandler(ch)

log.info('creating an instance of auxiliary_module.Auxiliary')
a = auxiliary_module.Auxiliary()
log.info('created an instance of auxiliary_module.Auxiliary')

log.info('calling auxiliary_module.Auxiliary.do_something')
a.do_something()
log.info('finished auxiliary_module.Auxiliary.do_something')

log.info('calling auxiliary_module.some_function()')
auxiliary_module.some_function()
log.info('done with auxiliary_module.some_function()')

# remember to close the handlers
for handler in log.handlers:
    handler.close()
    log.removeFilter(handler)

参照してください: https://docs.python.org/2/howto/logging-cookbook.html

于 2014-07-27T06:24:08.233 に答える
35

ファイルと stderr にログを記録する最も簡単な方法:

import logging

logging.basicConfig(filename="logfile.txt")
stderrLogger=logging.StreamHandler()
stderrLogger.setFormatter(logging.Formatter(logging.BASIC_FORMAT))
logging.getLogger().addHandler(stderrLogger)
于 2015-05-07T09:22:21.243 に答える