hikaru’s diary

Django Engineer

【Django】ロギングでサーバーのログをファイルに記録する

はじめに

コンソールに出ていたログをファイルにも同時に出力して後から見返すために作成しました。
エラーはメールで通知するようにしているんですけどエラー以外も記録したほうが良いのかなって思ってファイルに記録します。
【Django】500エラーをメールで通知しよう! - hikaru2323’s diary

方法

ロギング | Django ドキュメント | Django

ロギングの設定を一切してなかったのでドキュメントにある例をコピペしてみる

BASE_DIR = Path(__file__).resolve().parent.parent

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'file': {
            'level': 'INFO',  # 変更前DEBUG
            'class': 'logging.FileHandler',
            # 'filename': '/path/to/django/debug.log',
            'filename': str(BASE_DIR) + '/settings/debug.log'
        },
    },
    'loggers': {
        'django': {
            'handlers': ['file'],
            'level': 'INFO',  # 変更前DEBUG
            'propagate': True,
        },
    },
}


levelとfilenameを変更して私の環境ではこんな感じで無事ファイル書き込み成功。
ただ、これだとファイルが大きくなりそう&gitにアップロードしないようにもしたい。

# 上で宣言
import os
from datetime import datetime

month = str(BASE_DIR) + '/static/hide/' + datetime.now().strftime('%Y-%m') + '.log'
# month= (省略)/static/hide/2022-03.log
if not os.path.exists(month):
    f = open(month, 'w')
    f.write('')
    f.close()
    print("ログファイルを作成しました!", month)

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'level': 'INFO',
            'class': 'logging.StreamHandler',
        },
        'file': {
            'level': 'INFO',
            'class': 'logging.FileHandler',
            'filename': month,
        },
    },
    'loggers': {
        'django': {
            'handlers': ['file', 'console'],
            'level': 'INFO',
            'propagate': True,
        },
    },
}


2022-03.logを作ったり書き込みをする変数monthを用意し、gitにアップロードしない方法は以下を参照してください。
【Django】個人情報をgitにアップしないようにする - hikaru2323’s diary

'handlers': ['file', 'console'],のところはドキュメントの最後の例を真似しました。(ここ時間かかった。)
作り終わってから気づいたんですけど、filenameは「"filename": os.path.join(LOG_BASE_DIR, "django.log"),」こんな感じのが良いかもしれません。

まとめ

・ログのファイル出力をした
・ファイルが膨張しないように年月ごとにログファイルを作成した
・ログ出力に個人情報も含まれてるのでgitを使う際は注意