[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)