ログの出力 on Python
- Ubuntu 10.10
Python 2.6
ログの環境設定ファイルの取得が面倒でなければ、printでデバッグするよりいいかも。
■環境設定ファイル(log.conf)
[loggers] keys=root,app [handlers] keys=stream [formatters] keys=form [logger_root] level=NOTSET handlers=stream [logger_app] level=WARNING handlers=stream propagate=1 qualname=root.app [handler_stream] class=StreamHandler level=NOTSET formatter=form args=(sys.stdout,) [formatter_form] format=%(name)s %(asctime)s %(levelname)s "%(message)s" %(pathname)s datefmt= class=logging.Formatter
■構成
設定ファイルのフォーマットはConfigParser形式で記述する。
- 16.6.14.2. 環境設定ファイルの書式
- http://pythonjp.sourceforge.jp/dev/library/logging.html#logging-config-fileformat
[loggers] # ロガー名を指定 keys=root,app [handlers] # ハンドラ名を指定 keys=stream [formatters] # フォーマット名を指定 keys=form [logger_root] # ロガーの設定 level=NOTSET # ログレベルを指定 handlers=stream # ハンドラを指定 [logger_app] # root以外のロガー設定 level=WARNING # NOTESTの場合、root以外のロガーはrootのログレベルとなる。 handlers=stream propagate=1 # 上位loggerに通知(0:通知しない、1:通知する) qualname=root.app # ロガーのチャネル名を階層的に表示。アプリケーションがこのロガーを取得する際に使う名前。 [handler_stream] # ハンドラの設定 class=StreamHandler # ハンドラのクラスを指定。ここでは標準出力にログを出力 level=NOTSET # ログレベルを指定 formatter=form # フォーマットを指定 args=(sys.stdout,) # ハンドラクラスのコンストラクタ引数を指定 #その他ハンドラは下記参照 #16.6.8. Handler オブジェクト:http://pythonjp.sourceforge.jp/dev/library/logging.html#handler [formatter_form] # フォーマット設定 format=%(name)s %(asctime)s %(levelname)s %(pathname)s %(message)s datefmt= # 日時フォーマット class=logging.Formatter # フォーマッタのクラス名を指定。通常このまま。 #フォーマットの属性は下記参照 #14.5.6 Formatter オブジェクト:http://pythonjp.sourceforge.jp/dev/library/logging.html#formatter
■プログラム(TestLog.py)
#! /usr/bin/env python # coding:utf-8 import logging import logging.config LOGGING_CONF = 'log.conf' class SampleLog(object): ''' ログ機能 ''' def __init__(self): ''' ログ出力 ''' logging.config.fileConfig(LOGGING_CONF) # rootロガー logger = logging.getLogger() logger.debug('DEBUG出力の初期化しました') logger.info('INFO出力の初期化しました') logger.warn('WARNING出力の初期化しました') # appロガー logger = logging.getLogger('root.app') logger.info('infoログ') logger.debug('debugログ') logger.warn('warnログ') logger.error('errログ') if __name__ == "__main__": smp = SampleLog()
■結果
root 2010-11-10 22:54:12,254 DEBUG "DEBUG出力の初期化しました" /home/yunmaru/work/workspace/fcms/ref/testLog.py root 2010-11-10 22:54:12,255 INFO "INFO出力の初期化しました" /home/yunmaru/work/workspace/fcms/ref/testLog.py root 2010-11-10 22:54:12,255 WARNING "WARNING出力の初期化しました" /home/yunmaru/work/workspace/fcms/ref/testLog.py root.app 2010-11-10 22:54:12,255 WARNING "warnログ" /home/yunmaru/work/workspace/fcms/ref/testLog.py root.app 2010-11-10 22:54:12,255 WARNING "warnログ" /home/yunmaru/work/workspace/fcms/ref/testLog.py root.app 2010-11-10 22:54:12,256 ERROR "errログ" /home/yunmaru/work/workspace/fcms/ref/testLog.py root.app 2010-11-10 22:54:12,256 ERROR "errログ" /home/yunmaru/work/workspace/fcms/ref/testLog.py
■参考
- 16.6. logging — Python 用ロギング機能
- http://pythonjp.sourceforge.jp/dev/library/logging.html#formatter