C Lang/Python Program Diary
로그 가이드라인
iliosncelini
2019. 11. 21. 10:33
logの方針
PythonのLog出力はPython内臓のLoggingモジュールを使う。下記の例はLog設定が揃っているConfigとして、Logの方針がそのまま溶けている。
LOG_CONFIG = {
'version': 1,
'formatters': {
'general': {
'format': "[%(asctime)s %(levelname)8s] %(filename)s %(funcName)s at line %(lineno)s - %(message)s"
}
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'general',
'level': 'DEBUG',
},
'file_app': {
'class': 'logging.handlers.RotatingFileHandler',
'level': 'DEBUG',
'formatter': 'general',
'filename': os.path.join(BASE_DIR, 'log/app.log'),
'mode': 'a',
'maxBytes': 10485760,
'backupCount': 5,
},
'file_error': {
'class': 'logging.handlers.RotatingFileHandler',
'level': 'ERROR',
'formatter': 'general',
'filename': os.path.join(BASE_DIR, 'log/error.log'),
'mode': 'a',
'maxBytes': 10485760,
'backupCount': 5,
}
},
'root': {
'handlers': ('console', 'file_app', 'file_error'),
'level': 'DEBUG'
}
}
出力タイプ
出力タイプは上記のhandlerのところで設定を担当する。大きくConsole出力とFile出力に分けられている。
Console
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'general',
'level': 'DEBUG',
},
...
},
consoleというキー名は勝手に決めてOK- Consoleは
prod環境かenv環境かによって、levelの表示が違う。prodの場合はINFOレベル、envの場合はDEBUGレベルで出す。
File
'handlers': {
...
},
'file_app': {
'class': 'logging.handlers.RotatingFileHandler',
'level': 'DEBUG',
'formatter': 'general',
'filename': os.path.join(BASE_DIR, 'log/app.log'),
'mode': 'a',
'maxBytes': 10485760,
'backupCount': 5,
},
'file_error': {
'class': 'logging.handlers.RotatingFileHandler',
'level': 'ERROR',
'formatter': 'general',
'filename': os.path.join(BASE_DIR, 'log/error.log'),
'mode': 'a',
'maxBytes': 10485760,
'backupCount': 5,
}
},
file_app、file_errorというキー名は勝手に決めてOK- fileタイプのハンドラーはアプリログとエラーログに分ける。
- 1はアプリログとしてアプリが出すすべてのログを取る
- 2はエラーログとしてアプリが出すエラーログだけを取る
- 基本ログが貯めるパスは
[root]/log/の直下にする - アプリローグは
ログメッセージ
Time
Where
Message
ログレベル
Info
Debug
Error
- TraceBack