あるフリーランスエンジニアの色んなメモ!! ITスキル・ライフハックとか

Python:汎用性の高いロギング設定

実装例

logging設定

from logging.config import dictConfig
import os


LOG_DIR = 'ログ出力先ディレクトリのパス'
if not os.path.exists(LOG_DIR):
     os.mkdir(LOG_DIR)

LOGGING = {
    # 「1」固定
    'version': 1,

    # 既存のロギング設定を無効にする
    'disable_existing_loggers': True,

    # formatter
    'formatters': {
        # メッセージと出力時刻のみ出力
        'simple': {
            'format': '[%(asctime)s]%(message)s',
        },
        # ログレベル、ファイルパス、行番号、関数名も出力
        'detail': {
            'format': '[%(asctime)s][%(levelname)s]%(pathname)s@%(lineno)d#%(funcName)s: %(message)s',
        },
    },

    # handler
    'handlers': {
        # コンソール出力
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'detail',
        },
        # ファイル出力
        'file': {
            'level': 'DEBUG',
            'class': 'logging.handlers.WatchedFileHandler',
            'formatter': 'detail',
            'filename': os.path.join(LOG_DIR, '[ログファイル名]'),
            'encoding': 'UTF-8',
            'delay': True,
        },
    },

    # logger
    'loggers': {
        '': {
            # コンソール出力、ファイル出力 を使う
            'handlers': ['console', 'file', ],
            'level': 'DEBUG',
            'propagate': True,
        },
        'your package name': {
           'level': 'DEBUG',
           'propagate': True,
        },
    },
}


dictConfig(LOGGING)

log出力

from logging import getLogger


logger = getLogger(__name__)


logger.info('foo')
comments powered by Disqus