ログのすべての行にsession_keyが含まれるように、Djangoのログを構成しようとしています(設定されている場合)。私は方法を見つけたと思います:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'request': {
'format': '%(asctime)s %(levelname)-8s [%(sessid)s] %(message)s',
},
},
'filters': {
'request': {
'()': 'yellowballs.yblogging.RequestFilter'
},
},
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'filters': ['request'],
'formatter': 'request',
}
},
'loggers': {
'django': {
'handlers': ['console'],
'level': 'DEBUG',
'propagate': True,
},
},
}
フィルタが次のように定義されている場合:
class RequestFilter(logging.Filter):
def filter(self, record):
session_store = SessionStore()
record.sessid = session_store.session_key
return True
うまく機能しているようですが、Djangoはデフォルトの形式でメッセージをログに記録しています。
2013-03-01 08:44:41,359 WARNING [None] Not Found: /
[01/Mar/2013 08:44:41] "GET / HTTP/1.1" 200 1962
[01/Mar/2013 08:44:41] "GET / HTTP/1.1" 200 1962
ログの残りの部分と同じ形式で行を表示するにはどうすればよいですか?
ログメッセージがプロジェクト全体で一貫するように、すべてのDjangoのデフォルト形式をオーバーライドする簡単できれいな方法はありますか?