以下関数を見てもらった方が早いですが、簡単に説明をします。
一つのロガーに、syslogに出力するハンドラーと別ログファイルに出力する
ハンドラーを設定して両方にログ出力する関数を作成しました。
sysログファイルにはdebugレベル以上のログを
別ログファイルにはinfoレベル以上のログを出力する仕組みにしたいのですが
syslogハンドラーのloglevelをdebugにしても
debugレベルのログがsyslogに出力されず、infoレベルからです。
どうやら別ログファイルに設定したハンドラーのレベルが
優先されているようです。
何か対応策はありますでしょうか?
Python
1import logging 2import logging.handlers 3 4#syslog用フォーマット 5syslog_fmt = '{0}: [%(levelname)8s] --- process:%(process)d thread:%(threadName)s message: %(message)s package[%(filename)s] function[%(funcName)s]' 6 7#実行ログ用フォーマット 8jikolog_fmt = '[%(asctime)s] [%(levelname)8s] --- process:%(process)d thread:%(threadName)s %(message)s' 9 10 11#実行ログ用のロガーを生成 12def get_logger(script_id, filename): 13 14 15 #フォーマット生成 16 formatter = logging.Formatter(jikolog_fmt) 17 sys_formatter = logging.Formatter(syslog_fmt.format(script_id)) 18 19 #実行ログ用ハンドラー生成 20 handler = logging.FileHandler(filename) 21 handler.formatter = formatter 22 handler.setLevel(logging.INFO) 23 24 #sysログ用ハンドラー生成 25 #sys_handler = logging.handlers.SysLogHandler(address='/dev/log') 26 sys_handler = logging.handlers.SysLogHandler() 27 sys_handler.formatter = sys_formatter 28 sys_handler.setLevel(logging.DEBUG) 29 30 #ロギング生成 31 logger = logging.getLogger(script_id) 32 logger.setLevel(logging.DEBUG) 33 logger.addHandler(handler) 34 logger.addHandler(sys_handler) 35 36 return logger
あなたの回答
tips
プレビュー