Djangoのログ出力はsettings.pyのLOGGINGに記述する
ターミナルとファイルにログ出力する記述の例
settings.py
LOGGING = {
'version': 1, #ロガーのバージョン
'disable_existing_loggers': False, #デフォルトのログを無効化するかどうか
'formatters':{
'standard':{
'format' : "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
},
},
'handlers': {
'console': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter':'standard',
},
'file': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join('logs', 'debug.log'),
'maxBytes': 50000,
'backupCount':2,
'formatter':'standard',
},
},
'loggers': {
'django': {
'handlers': ['console','file'],
'level': 'DEBUG',
'propagate': True,
}
},
}
formattersの書き方
settings.py
'formatters':{
'standard':{ #formatter名
'format' : "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s", #形式
},
}
- %(asctime)s:ログが出力された時刻
- %(levelname)s:ログレベル名
- %(name)s:ロガーの名前
- %(lineno)s:ログを出力した行番号
- %(message)s:ログメッセージ
handlersの書き方
settings.py
'handlers': {
'console': { #ターミナル上に出力
'level': 'INFO', #ログレベル
'class': 'logging.StreamHandler', # ターミナルに表示する
'formatter':'standard', #formatterを指定する
},
'file': { #ファイルに出力
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler', #ログをローテーションしてファイルに出力する
'filename': os.path.join('logs', 'debug.log'), #出力するファイルの場所
'maxBytes': 50000, #ローテーションの基準となるファイルサイズ
'backupCount':2, #バックアップを作成するファイルの数
'formatter':'standard',
},
}
ログレベルは、CRITICAL、ERROR、WARNING、INFO、DEBUGの順で重大
時間でローテーションさせるTimedRotatingFileHandlerなどもある
loggersの書き方
settigs.py
'loggers': {
'django': {
'handlers': ['console','file'], #handlersを指定する
'level': 'DEBUG', #ログレベル
'propagate': True, #親ロガーへ伝搬するかどうか
}
}
参考
https://docs.python.org/ja/3/library/logging.html
https://qiita.com/okoppe8/items/3e8ab77c5801a7d21991