logging
モジュールを使用して Python ロギングを行う方法はありますか? たとえば、 、logger.warning
、logger.critical
へのすべての呼び出しをlogger.error
目的の場所に移動するだけでなく、常に にコピーしたいと考えていstdout
ます。これは、次のようなメッセージの重複を避けるためです。
mylogger.critical("something failed")
print "something failed"
logging
モジュールを使用して Python ロギングを行う方法はありますか? たとえば、 、logger.warning
、logger.critical
へのすべての呼び出しをlogger.error
目的の場所に移動するだけでなく、常に にコピーしたいと考えていstdout
ます。これは、次のようなメッセージの重複を避けるためです。
mylogger.critical("something failed")
print "something failed"
ログ出力はすべてハンドラによって処理されます。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)
stdout にログを記録する最も簡単な方法:
import logging
import sys
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
複数のハンドラーを使用することは可能です。
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
ファイルと stderr にログを記録する最も簡単な方法:
import logging
logging.basicConfig(filename="logfile.txt")
stderrLogger=logging.StreamHandler()
stderrLogger.setFormatter(logging.Formatter(logging.BASIC_FORMAT))
logging.getLogger().addHandler(stderrLogger)