カテゴリー
アーカイブ
アーカイブ
今回は、DjangoのLoggingの設定について書いていきたいと思います!
設定ファイル(settings.py)
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': '[%(asctime)s %(levelname)s] %(pathname)s %(lineno)d %(message)s',
}
},
"handlers": {
'myapp_log': {
'formatter': 'verbose',
'class': 'logging.FileHandler',
'filename': '/var/log/myapp/myapp.log',
},
'django_log': {
'formatter': 'verbose',
'class': 'logging.FileHandler',
'filename': '/var/log/myapp/django.log',
},
},
"loggers": {
"django": {
"handlers": ["django_log"],
"level": "ERROR",
'propagate': False,
},
"myapp": {
'handlers': ['myapp_log'],
'level': 'DEBUG',
'propagate': False,
}
}
}
settings.py に LOGGING を追加します。
ログ出力方法
import logging
logger = logging.getLogger('myapp')
logger.debug('debug log ですよ。')
logger.info('info log ですよ。')
このようにアプリケーション内でロガーを指定(今回はmyapp)すると、
ログファイル/var/log/myapp/myapp.log
にログが出力されます。
DjangoのLoggingの概要を見てみる
まず、 Djangoの公式ドキュメントを読みます。
Djangoの公式ドキュメントに、
Django uses and extends Python's builtin logging module to perform system logging.
This module is discussed in detail in Python's own documentation.
Djangoは、Pythonの組み込みloggingモジュールを使用および拡張して、システムロギングを実行します。
このモジュールについては、Python独自のドキュメントで詳しく説明されています。
と記載があるように、Djangoのloggingは、Pythonの組み込みモジュール「logging」を使っています。 なので詳しい設定はPythonのドキュメントを見ればだいたいok。
それぞれの定義について
・version:スキーマのバージョンを表す整数値。現在有効な値は 1 だけ
・disable_existing_loggers:キーの値を True にすると、全てのデフォルトの設定が無効になる。基本的には FalseでOK
・Handlers:loggerによって生成されたログメッセージの出力先の設定する。
・Formatters:ログに出力するテキストの形式を設定する。
・Loggers:ログを書き込むための入り口。getLogger('ロガー名') で呼び出したロガー名と一致したロガーを使ってログ出力される。どのログレベルまで表示を行うかを設定できる。 ・ログレベル
DEBUG:おもに問題を診断するときにのみ関心があるような、詳細な情報。
INFO:想定された通りのことが起こったことの確認。
WARNING:想定外のことが起こった、または問題が近く起こりそうである (例えば、'disk space low') ことの表示。
ERROR:より重大な問題により、ソフトウェアがある機能を実行できないこと。
CRITICAL:プログラムが実行不可となるような重大なエラーが発生した場合。
Djangoのデフォルトのロガー定義
Django には https://github.com/django/django/blob/main/django/utils/log.py にあるように、 デフォルトロガーが定義されています。
# Default logging for Django. This sends an email to the site admins on every
# HTTP 500 error. Depending on DEBUG, all other log records are either sent to
# the console (DEBUG=True) or discarded (DEBUG=False) by means of the
# require_debug_true filter. This configuration is quoted in
# docs/ref/logging.txt; please amend it there if edited here.
DEFAULT_LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse',
},
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
},
},
'formatters': {
'django.server': {
'()': 'django.utils.log.ServerFormatter',
'format': '[{server_time}] {message}',
'style': '{',
}
},
'handlers': {
'console': {
'level': 'INFO',
'filters': ['require_debug_true'],
'class': 'logging.StreamHandler',
},
'django.server': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'django.server',
},
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler',
},
},
'loggers': {
'django': {
'handlers': ['console', 'mail_admins'],
'level': 'INFO',
},
'django.server': {
'handlers': ['django.server'],
'level': 'INFO',
'propagate': False,
},
},
}
独自のLOGGINGの設定をする場合は、DEFAULT_LOGGING を settings.py の LOGGINGにコピーして、
出力したい設定を行うとスムーズかもしれません!
以上、Djangoのロガー設定についてでした!