pylonsをpasterで起動している時、コンソールにアクセス情報やsource内のprint等が表示される。
pylonsをpasterで起動する場合、この辺も全てpasterの管理下にあるので、ini次第で色々customできるみたい。
今回はログをcustomしてファイルに保存するようにしてみた。
development.ini
通常このdevelopment.iniが読まれる。名前は何でも良いみたいだが、自分は開発用はdevelopment.ini、scgiで起動する時は別のscgi.ini等作って分けている。
まずはdevelopment.iniに書いた内容。(あくまで設定例です。)
...上はその他のコンフィグ...
#############################
### Logging configuration ###
#############################
[loggers]
#keys = root, routes, kapiapp, sqlalchemy
keys = root, routes, kapiapp, purchase, settlement, test
[handlers]
keys = console, querylog, accesslog, errorlog, settlementlog, testlog
[formatters]
keys = generic
## loger section ###
[logger_test]
level = DEBUG
handlers = testlog
qualname = kapiapp.controllers.member
[logger_purchase]
level = DEBUG
handlers = settlementlog
qualname = kapiapp.controllers.member.purchase
[logger_settlement]
level = DEBUG
handlers = settlementlog
qualname = kapiapp.controllers.settlement
[logger_root]
level = INFO
handlers = console
[logger_routes]
level = INFO
handlers = accesslog
qualname = routes.middleware
# "level = DEBUG" logs the route matched and routing variables.
[logger_kapiapp]
level = DEBUG
handlers = accesslog
qualname = kapiapp
[logger_sqlalchemy]
level = INFO
handlers = querylog
qualname = sqlalchemy.engine
# "level = INFO" logs SQL queries.
# "level = DEBUG" logs SQL queries and results.
# "level = WARN" logs neither. (Recommended for production systems.)
## handler section ###
[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic
[handler_accesslog]
class = FileHandler
args = ('logs/access.log', 'a')
level = DEBUG
formatter = generic
[handler_errorlog]
class = FileHandler
args = ('logs/error.log', 'a')
level = DEBUG
formatter = generic
[handler_querylog]
class = FileHandler
args = ('logs/query.log','a')
level = DEBUG
formatter = generic
[handler_settlementlog]
class = FileHandler
args = ('logs/settlement.log','a')
level = DEBUG
formatter = generic
[handler_testlog]
class = FileHandler
args = ('logs/test.log','a')
level = DEBUG
formatter = generic
## formatter section ###
[formatter_generic]
format = %(asctime)s,%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
datefmt = %H:%M:%S
[loggers]セクション
実際のログをする人の定義。いろんな場所にcustomすると、これが増えてく事になりそう。
[logger_test]
level = DEBUG
handlers = testlog
qualname = kapiapp.controllers.member
このqualnameでどのモジュールを見張るか指定するみたい。
例えばこのkapiapp.controllers.member内で
import logging
log.debug("-- debug --")
と書くとlogger_testに流れてくる。
※但しハンドラも設定しとく必要あり。
[handlers]セクション
その名の通りハンドラなんだが、コンソールに出すか、どっかのファイルに出すかとか、設定する。
[handler_testlog]
class = FileHandler
args = ('logs/test.log','a')
level = DEBUG
formatter = generic
実際ハンドラとloggersは一対多みたいな関係なので、testlogって名前は微妙です・・。
accesslogとかerrorlogってのがあってそこに、複数のloggerから流し込むのが正しいか・・。
[formatters]セクション
keys = generic以外知らん。他にもあるんだろうけど、genericで事足りてる。
[formatter_generic]
format = %(asctime)s,%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
datefmt = %H:%M:%S
ま、これはこのままで良いかと。
[handler_console]でpaster serve実行時にログが流れてくるんだが、どうもまだ上記の設定では複数箇所にログが入ってきてしまう。きちんとは分け切れてない・・・。
恐らくlevel = DEBUGって所と[logger_routes]をもっとよく見れば色々最適化出来そう。
後、loggersセクションはそのモジュールから下も見てくれるんだが、モジュール単位で設定しきゃならないんだろうか。(複数指定だとエラーがでた。)まあ、これはそういうものな気もするけど。
参考URL
http://kapi.jp/kapi_blog/224
2009年04月13日
関連カテゴリ Python