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_appfile_errorというキー名は勝手に決めてOK
  • fileタイプのハンドラーはアプリログとエラーログに分ける。
    • 1はアプリログとしてアプリが出すすべてのログを取る
    • 2はエラーログとしてアプリが出すエラーログだけを取る
  • 基本ログが貯めるパスは[root]/log/の直下にする
  • アプリローグは

ログメッセージ

Time

Where

Message

ログレベル

Info

Debug

Error

  • TraceBack

+ Recent posts