いまいち使い方・設定の仕方がよくわからなかったので色々しらべた。
現状の知識をメモっとく。
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', },