• 2018-06-01
ウズマスター戦記
ウズマスター戦記 https://www.uzumax.org/2018/06/djangofilehandler.html

Djangoのログをファイル出力~FileHandler~

Djangoのログを出力するにはハンドラー「logging.FileHandler」を使用します。
サンプル設定を以下に記載します。


Python標準

DjangoのログはPython標準のものです。
Pythonの公式サイトの説明ページはこちら。


しかし見てもよく分からないので以下のサンプルをご確認ください。

logging.FileHandlerのサンプル

setting.pyのLOGGING配下の「handlers」に以下の設定を追記して下さい。

logging.FileHandler該当箇所

    'handlers': {
        'file': {
            'level': 'DEBUG',  # ログレベル
            'class': 'logging.FileHandler',  # ハンドラー名
            'filename': os.path.join(BASE_DIR, 'heibon-django.log'),  # 出力先
            'formatter': 'heibon',  # フォーマット
        },

filenameの場所にファイルが作成され、ログが出力されることになります。

logging.FileHandlerの場合、ログはローテーションされません。
ファイルサイズでローテーションしたい場合や、日時でローテーションをしたい場合は違うファイルハンドラーを使うことになります。

ただ、私の開発環境であるWindowsだとログローテーションが出来ない事象が発生しておりまして、さてどうしたものか。
詳細はこちらをご確認下さい。




LOGGING全体像

特に問題は無いはずですが、イマイチうまくログが出ない人もいるかもしれないので、参考までに上記のlogging.FileHandlerを含む全体像を以下に記載しておきます。
import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

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': {
        'file': {
            'level': 'DEBUG',  # ログレベル
            'class': 'logging.FileHandler',  # ハンドラー名
            'filename': os.path.join(BASE_DIR, 'heibon-django.log'),  # 出力先
            'formatter': 'heibon',  # フォーマット
        },
        '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","file"
        ]
    },
    'loggers': {
        'django': {
            'handlers': ['console', 'mail_admins'],
            'level': 'DEBUG',
        },
        'django.server': {
            'handlers': ['django.server'],
            'level': 'DEBUG',
            'propagate': False,
        },
    }
}

特に難しいことは無いかと思います。

バックナンバー

0 件のコメント:

コメントを投稿

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