Python 记录conf并将其导出到其他模块
为了提高我的devOps技能,我将日志放在我想要/需要的地方。 捕获一个env变量,如果我想在标准输出上使用DEBUG/INFO log(dev)或在文件上使用WARNING及更高版本(prod),我可以设置该变量 但是在python中,我没有发现如何设置一次logger conf(在主文件中?)并将其用于整个项目,而不必重写所有内容或到处传输日志对象。我很确定我错过了什么 编辑:我制作了一个log.py文件,看起来像这样Python 记录conf并将其导出到其他模块,python,logging,Python,Logging,为了提高我的devOps技能,我将日志放在我想要/需要的地方。 捕获一个env变量,如果我想在标准输出上使用DEBUG/INFO log(dev)或在文件上使用WARNING及更高版本(prod),我可以设置该变量 但是在python中,我没有发现如何设置一次logger conf(在主文件中?)并将其用于整个项目,而不必重写所有内容或到处传输日志对象。我很确定我错过了什么 编辑:我制作了一个log.py文件,看起来像这样 import os import logging from dotenv
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")
...
但是我没有错误,也没有登录我的术语。您不需要传输日志对象。当您配置或命名一个全局可用的记录器时。因此,您可以在主文件中设置记录器,并在所有其他位置使用它
主文件
导入日志
logger=logging.getLogger('mylog')
如果调试:
mylog.setLevel(logging.DEBUG)
mylog.addHandler(…)
#完成所有设置
logger.log(“记录该日志”)#使用记录器
其他文件
导入日志
logger=logging.getLogger('mylog')
logger.log(“记录此”)#使用记录器,它已配置
您检查了吗?您还需要在记录器上设置液位。默认为警告,信息在警告之下logger.setLevel(logging.DEBUG)
然后返回我读取的id以使用logging.getLogger(\uu name\uu)
获取当前模块。因此,我尝试创建一个日志模块,并将其导入到任何需要的地方。但是现在终端上没有写入任何内容,或者创建了文件,但没有在内部登录。只有当您希望每个模块都有单独的记录器时,才需要这样做。它仍然可以只配置一次。只需将不使用参数得到的所有处理程序添加到根记录器root=logging.getLogger()
。所有其他记录器都会传播到此记录器,您可以在那里配置处理程序的级别。但您的意思是我在main.py
中进行的配置仍将用于其他文件吗?为什么?它将在main使用的每个文件中工作<代码>日志记录创建对日志记录者的全局引用,这样每个模块的根日志记录者都是相同的。我用刚才尝试的示例编辑了我的问题。