2018年5月28日月曜日
ウズマスター戦記
ウズマスター戦記 https://www.uzumax.org/2018/05/django_28.html

Djangoのシステム全体でログを同じように出力する~root設定~

システムのログ出力は、「django」パッケージ、「django.server」パッケージなど、それぞれパッケージ毎に分けて出力するのが初期状態ですが、そんな細かい設定など不要で全部同じように出力すれば良いというケースも多いと思います。

システム全体でまとめて同じ出力にする方法をご紹介です。


設定

ズバリ、以下をsetting.pyのLOGGINGに張って下さい。
これを張ればどんなプロジェクトでもとりあえずログは出るようになるはずです。


setting.py

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)s] %(message)s a',
        },
        # プロジェクト用のフォーマットを追加
        'heibon': {
            'format': '\t'.join([
                "[%(levelname)s]",
                "%(asctime)s",
                "%(name)s:%(lineno)d",
                "%(message)s",
                "%(threadName)s",
            ])
        },
    },
    'handlers': {
        'console': {
            'level': 'DEBUG', 
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
            'formatter': 'heibon'  # フォーマッター追加
        },
        'django.server': {
            'level': 'INFO',
            'class': 'logging.StreamHandler',
            'formatter': 'django.server',
        },
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        },
    },
    "root": {
        "level": "DEBUG",
        "handlers": [
            "console"
        ]
    },
    'loggers': {
        'django': {
            'handlers': ['console', 'mail_admins'],
            'level': 'DEBUG',
        },
        'django.server': {
            'handlers': ['django.server'],
            'level': 'DEBUG',
            'propagate': False,
        },
    }
}

これで全部同じようにボコボコとログが出てきます。

[DEBUG] 2018-05-29 17:14:34,833 start_samples.views:9   デバッグ        Thread-1
[INFO]  2018-05-29 17:14:34,833 start_samples.views:10  インフォ        Thread-1
[WARNING]       2018-05-29 17:14:34,833 start_samples.views:11  ワーニング      Thread-1
[ERROR] 2018-05-29 17:14:34,833 start_samples.views:12  エラー  Thread-1
[CRITICAL]      2018-05-29 17:14:34,833 start_samples.views:13  クリティカル    Thread-1

(「mail_admins」だけはゴミログが多過ぎるのでレベルをERRORにしてあります)

これをべースに、不要なログを削っていくやり方がオススメです。

ポイントはroot

ポイントはここです。

loggers

    "root": {
        "level": "DEBUG",
        "handlers": [
            "console"
        ]
    },


ポイントはroot設定を追加することです。これで定義が無いログについては全部これを読み込むようになります。

ただし、Djangoはデフォルト設定で「'django'」「'django.server'」が設定されているので自動的にルートを読む込むことにはなりません。

同じ水準になるよう設定を上書きする必要があります。

バックナンバー



0 件のコメント:

コメントを投稿

お気軽にコメント下さい。