設定ファイルの読み込みにはlogging.config.fileConfig(filename)を使うので、
import logging
だけでなく、import logging.config
もしなきゃダメ。以下サンプル
設定ファイル
[loggers]
keys=root,logger01
[handlers]
keys=stdout01,file01
[formatters]
keys=form01
[logger_root]
level=NOTSET
handlers=stdout01
[logger_logger01]
lebel=DEBUG
handlers=stdout01,file01
propagate=0
qualname=top.mid
[handler_stdout01]
class=StreamHandler
level=NOTSET
formatter=form01
args=(sys.stdout,)
[handler_file01]
class=FileHandler
level=WARNING
formatter=form01
args=("app.log",'w')
[formatter_form01]
format=%(name)s: %(asctime)s %(levelname)s %(message)s
datefmt=
class=logging.Formatter
サンプルコード
#-*- coding: utf-8 -*-
import logging
import logging.config
logging.config.fileConfig('./logging.conf')
#logger_root
logger = logging.getLogger()
logger.debug(logger.name)
logger.debug('DEBUGログ')
logger.warn('WARNINGログ')
#logger_logger01(top.mid)
logger = logging.getLogger('top.mid')
logger.debug(logger.name)
logger.info('infoログ')
logger.warn('warnログ')
以下、実行結果
標準出力
root: 2008-11-10 22:50:00,038 DEBUG root
root: 2008-11-10 22:50:00,042 DEBUG DEBUGログ
root: 2008-11-10 22:50:00,042 WARNING WARNINGログ
top.mid: 2008-11-10 22:50:00,042 DEBUG top.mid
top.mid: 2008-11-10 22:50:00,043 INFO infoログ
top.mid: 2008-11-10 22:50:00,043 WARNING warnログ
app.logへの出力
top.mid: 2008-11-10 22:50:00,043 WARNING warnログ
だいたい見れば分かるはず。
propagate
ってのは自分が受け取ったものを、上位のloggerにも通知するかの設定(通知する=1,しない=0)。何でもかんでも通知するとログが大爆発するので、記録方法によっては注意したほうが良いかも。level=NOTSET
ってのはroot loggerの場合、全てを記録。その他のloggerの場合は、親のloggerの設定に従ってログります。FileHandlerが使用するファイルは無い場合、fileConfigを呼んだ時点で勝手に作られる。
あと、サンプルだからFileHandlerを使ったけど、実際にはRotatingFileHandlerを使うケースのがほとんどのはず。
これ以上知りたいなら、ドキュメントを読みましょう。
0 件のコメント:
コメントを投稿