いまいち使い方・設定の仕方がよくわからなかったので色々しらべた。
現状の知識をメモっとく。
Djangoで使われているロギング機構は、 別にDjango独自の機能ではなく、pythonの標準で用意されているloggingが使用されているという事のよう。
なので、特にDjangoでしか通用しない知識ではないが、 ここではDjangoでの設定の仕方をベースに記載する。
ロガーの設置方法
ロギングで必要なのは
(1)ログ出力したい部分にメッセージを指定
(2)指定したメッセージをどのように出力するか設定
の2つ。
(1)ログ出力したい部分にメッセージを指定
ライブラリ内やロジック内など要所要所に埋め込む。
例)
# このようにすることで、logger毎に異なるログ出力設定を指定できるようになる。
logger = logging.getLogger(__name__)
logger.debut("debugメッセージ")
logger.warning("warningメッセージ")
logger.info("infoメッセージ")
logger.error("errorメッセージ")
logger.critical("criticalメッセージ")
# ログ出力設定で指定されるログレベルによって、出力されるかどうかが変わる。
# 上記の場合、levelがERRORで指定された場合、logger.error(),logger.critical()のメッセージのみ出力される
(2)指定したメッセージをどのように出力するか設定
(1)で埋め込まれているメッセージをどのように出力するか(コンソールか、ファイルか等)の設定を行う。
Djangoでは、settings.py内でLOGGING変数に設定ディクショナリを設定する。
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
# ↓このあたりの書式についてまだよくわかってない。
'()': 'django.utils.log.RequireDebugFalse',
},
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
},
},
# 出力形式を指定できる。下記のhandlersの設定に渡して使う。
'formatters': {
'verbose': {
'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message}',
'style': '{',
},
},
# どこに出力するなどが設定できる。下記のrootやloggers設定に渡して使う。
'handlers': {
# ↓これは、DEBUGレベルでStreamHandler(標準出力)に、verboseフォーマッタの形式で出力するという意味
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'verbose',
},
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
},
'file_images_importer': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': '/app/sync/logs/import_twitter_images.log',
'formatter': 'verbose',
},
'file_django_log': {
'level': 'INFO',
'class': 'logging.FileHandler',
'filename': '/app/sync/logs/django.log',
'formatter': 'verbose',
},
},
'root': {
'handlers': ['console', 'file_django_log'], # ハンドラは複数渡せる。
'level': 'INFO',
}
}
ライブラリ毎に設定を変えたければ、'loggers'キーに設定を追加する
'loggers': {
'django': {
'handlers': ['console', 'mail_admins', 'file'],
'level': 'INFO',
},
'py.warnings': {
'handlers': ['console', 'file'],
},
'django.db.backends': {
'handlers': ['console'],
'level': 'DEBUG',
},