読者です 読者をやめる 読者になる 読者になる

pythonのloggingの詳細設定を行う

python コード エラー解決

データ解析のステップが大きくなってくるとログファイルを出力しないとどこにエラーがが入ったかやバグのチェックが大変になってくるのでメモ。

利用するたびに設定を指定する

一瞬使いたい時。

import logging
LOG_OUTPUT = 'debug.log'

logging.basicConfig(format='%(asctime)s:%(levelname)s:%(message)s',
                                   level=logging.DEBUG,
                                   filename=LOG_OUTPUT)
logging.debug('debug_message')

.confにロギングの設定を指定する

複数の階層にまたがっている等複雑な時。

  • xxx.py(ログを撮りたいファイル)
import logging
logging.config.fileConfig('log.conf')
logger = logging.getLogger('Pipelinelog')
logger.debug('debug_message')
  • log.confの中身

ここでログの出力を指定する。

[loggers]
keys=root, Pipelinelog

[handlers]
keys=fileHandler

[formatters]
keys=logFormatter

[logger_root]
level=DEBUG
handlers=fileHandler

[logger_Pipelinelog]
level=DEBUG
handlers=fileHandler
qualname=Pipelinelog
propagate=0

[handler_fileHandler]
class=handlers.RotatingFileHandler
level=DEBUG
formatter=logFormatter
args=('debug.log',)

[formatter_logFormatter]
format=%(asctime)s - %(levelname)s - %(message)s
datefmt=

詳細

[handler_fileHandler]
class=handlers.RotatingFileHandler
level=DEBUG
formatter=logFormatter
args=('debug.log',)

がファイルハンドラ、ログを出力するファイルの詳細設定で formatter=以下にログ一行のフォーマットを指定する。 コマンドラインにもログを出力したい場合にはclass=StreamHandlerのハンドラを指定する。 このほかの.confの指定例は

Logging HOWTO — Python 2.7.x ドキュメント

を参照する。