gpt4 book ai didi

Python 单例日志记录无法正常工作 - 文件中的重复日志语句

转载 作者:太空宇宙 更新时间:2023-11-04 03:24:32 25 4
gpt4 key购买 nike

我正在尝试将日志记录到 python python 项目中。为此,我在我的 common.py 中编写了一个名为 get_logger 的方法来返回记录器。

import logging
def get_logger(name='app'):
log_config = config.LOG_CONFIG
logging.config.dictConfig(log_config)
logger = logging.getLogger(name)
return logger

注意日志配置放在config.LOG_CONFIG

LOG_CONFIG = {
'version': 1,
'disable_existing_loggers': False, # this fixes the problem

'formatters': {
'standard': {
'format': '%(asctime)s [%(levelname)8s] %(name)s: %(message)s'
},
# more formatters
},
'handlers': {
'file': {
'filename': '%s/%s' % (_cwd, '../logs/app/logging.log'),
'formatter': 'standard',
'when': 'midnight',
'class': 'logging.handlers.TimedRotatingFileHandler'
},
},
'loggers': {
# Works for
# 1. application logs (flask) and
# 2. all other logs where below logger name is passed to getLogger
'app': {
'handlers': ['file'],
'level': 'DEBUG',
'propagate': True
},
# For all the remaining logs
# Important: Don't include for production??
'': {
'handlers': ['file'],
'level': 'INFO',
'propagate': True
}
}
}

我有两个模块

  • 基础.py
  • sf_apis.py

sf_apis.py 中的一个类扩展了 base.py 中的一个类。我在 base.py 中调用了 get_logger。

base.py

from common import get_logger
log = get_logger()

class Base:

// .. some code ..

然后从 logging 中调用 getLogger 以获取 sf_apis.py 中的记录器

sf_apis.py

import logging

log = logging.getLogger('app')

class SfBulk(Base):

// .. some code ..

但是当我的另一个名为 sync_data.py 的模块通过调用 sf_apis.py 中的一些方法运行时,我在日志中看到重复的日志语句

2015-11-04 13:05:58,605 [    INFO] app: close_the_job :: job id = 75090000003sf4YAAQ
2015-11-04 13:05:58,605 [ INFO] app: close_the_job :: job id = 75090000003sf4YAAQ

我读了here那个

The logging module already implements a singleton pattern

所以我没有去创建一个单例的Logger类(网上有很多例子)

我错过了什么?请帮忙。

最佳答案

Python 记录器具有层次结构。您已经创建了两个:'app'''。按照惯例,层次结构定义为模块的点分隔路径。在特定情况下,空字符串记录器成为所有其他一级记录器的父级。具体来说,'''app' 的父级。

现在为 'app' 记录器设置 propagate = True。这意味着发送到此记录器的消息也将传播到其父级,即 ''。这就是您有重复消息的方式。

您可以将 propagate = False 设置为 'app' 记录器或为 '' 记录器设置另一个文件处理程序,这样消息将仍然重复,但在不同的文件中。

关于Python 单例日志记录无法正常工作 - 文件中的重复日志语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33516408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com