首页 > 解决方案 > 如何导入我的日志记录设置而不是将其硬编码到脚本中?

问题描述

我是否可以将我的日志记录设置导入脚本,而不必将其硬编码到每个单独的脚本中?我主要想减少冗余。

我现在添加到每个脚本的代码是这样的:

import logging
import sys

# enable logging
log = logging.getLogger(__name__)
log.setLevel(logging.DEBUG)
formatter = logging.Formatter(fmt="%(asctime)s - <%(filename)s:%(funcName)s> %(levelname)s: %(message)s",
                              datefmt="%Y-%m-%d - %H:%M:%S")
ch = logging.StreamHandler(sys.stdout)
ch.setLevel(logging.DEBUG)
ch.setFormatter(formatter)
fh = logging.FileHandler("updates.log", "a")
fh.setLevel(logging.DEBUG)
fh.setFormatter(formatter)
log.addHandler(ch)
log.addHandler(fh)

这让我只能说log.info('this thing happened!')

标签: pythonlogging

解决方案


您可以将日志记录配置封装在一个函数中,并在不同文件的开头调用它。

在文件中logging_utils.py

import logging
import sys

def log_setup():
    log = logging.getLogger(__name__)
    log.setLevel(logging.DEBUG)
    formatter = logging.Formatter(fmt="%(asctime)s - <%(filename)s:%(funcName)s> %(levelname)s: %(message)s", datefmt="%Y-%m-%d - %H:%M:%S")
    ch = logging.StreamHandler(sys.stdout)
    ch.setLevel(logging.DEBUG)
    ch.setFormatter(formatter)
    fh = logging.FileHandler("updates.log", "a")
    fh.setLevel(logging.DEBUG)
    fh.setFormatter(formatter)
    log.addHandler(ch)
    log.addHandler(fh)
    return log

main.py

from logging_utils import setup_log

log = setup_log()

log.info('this log will work as planned!')

推荐阅读