[TurboGears] ブログを作成する。その7
注意
この記事は、id:SumiTomohiko:20070122:1169468252の続きです。
ログ
今回は、tgdiaryにログ機能を追加します。といっても、TurboGearsに特別な仕組みがあるわけではなく、Pythonに備わっている機能をそのまま使用します。
ログは、プロジェクトのトップディレクトリにlogディレクトリを作り、その中にtgdiary.logという名前で出力することにします。
出力ハンドラの設定
tgdiary/config/log.cfgに、以下を追加します(はてなの表記法を回避するため、余計な空白が入っています)。これは、file_outという名前で、ログを出力するハンドラを設定するものです。file_outハンドラは、すべてのログを(level='NOTSET')、log/tgdiary.logというファイルに出力します(args='(log/tgdiary.log, )')。
[ [ [ file_out ] ] ] class='FileHandler' level='NOTSET' args='("log/tgdiary.log", )' formatter='full_content'
formatterパラメータは、出力するログの形式を設定するパラメータで、tgdiary/config/log.cfgで、以下のように設定されています。
[ [ [ full_content ] ] ] format='*(asctime)s *(name)s *(levelname)s *(message)s'
ロガーの設定
dev.cfg(本番環境ならprod.cfg)の、[ [ [ tgdiary ] ] ]を以下のように修正します。具体的には、handlersリストに'file_out'を追加します。これにより、tgdiaryロガーの出力が、file_outハンドラを通して、log/tgdiary.logに出力されるようになりました。
[ [ [ tgdiary ] ] ] level='DEBUG' qualname='tgdiary' handlers=['debug_out', 'file_out']
ログ出力
tgdiary/controllers.pyの先頭のある以下の行を有効にします。
import logging log = logging.getLogger("tgdiary.controllers")
例えばdateメソッドでログを出力したい場合、以下のように記述します。
log.debug('date(user=%s, year=%s, month=%s, day=%s, span=%s)' % (user, year, month, day, span))
これで日記を表示すると、以下のような出力がlog/tgdiary.logに得られます。
2007-01-23 02:17:25,877 tgdiary.controllers DEBUG date(user=1, year=2007, month=1, day=20, span=1)