记录conf并将其导出到其他模块

2024-04-16 19:12:00 发布

您现在位置:Python中文网/ 问答频道 /正文

为了提高我的devOps技能,我将日志放在我想要/需要的地方。 捕获一个env变量,如果我想在标准输出上使用DEBUG/INFO log(dev)或在文件上使用WARNING及更高版本(prod),我可以设置该变量

但是在python中,我没有发现如何设置一次logger conf(在主文件中?)并将其用于整个项目,而不必重写所有内容或到处传输日志对象。我很确定我错过了什么

编辑:我制作了一个log.py文件,看起来像这样

import os
import logging
from dotenv import load_dotenv
from utils import get_timestamp


def get_logger():
    load_dotenv(".env")
    env_dev = os.getenv('ENV_DEV', "development")

    logger = logging.getLogger(__name__)
    log_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

    if env_dev == "prod":
        handler = logging.FileHandler(f'log/{get_timestamp("%Y%m%d")}_app.log')
        handler.setLevel(logging.WARNING)
        handler.setFormatter(log_format)
        logger.addHandler(handler)
    else:  # DEV
        handler = logging.StreamHandler()
        handler.setLevel(logging.DEBUG)
        handler.setFormatter(log_format)
        logger.addHandler(handler)

    return logger

我使用它就像:

from log.logging import get_logger
# On Dev env
logger = get_logger()
logger.info("Do stuff")
...

但我没有错误,也没有登录我的任期


1条回答
网友
1楼 · 发布于 2024-04-16 19:12:00

您不需要传输日志对象。当您配置或命名一个全局可用的记录器时。因此,您可以在主文件中设置记录器,并在所有其他位置使用它

main file
import logging
logger = logging.getLogger('mylog')
if debug:
    mylog.setLevel(logging.DEBUG)
mylog.addHandler(...)
# do all your setup

logger.log("log that") # use logger
other file
import logging
logger = logging.getLogger('mylog')

logger.log("log this") # use logger, it is already configured

相关问题 更多 >