python记录器多次记录相同的条目

标签 python exception logging

我有一个这样的记录器初始化函数:

def generate_logger():
    import logging
    LOG_FILENAME = os.path.join(PROJECT_DIR, "mylog.log")
    FORMAT = "%(asctime)s : %(message)s"
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)
    fh = logging.FileHandler(LOG_FILENAME)
    formatter = logging.Formatter(FORMAT)
    fh.setFormatter(formatter)
    logger.addHandler(fh)
    return logger

在我的代码的某些部分,我有这样的异常捕获:

logger = generate_logger()
except AttributeError:
    logger.error('Opps we got an error')

奇怪的是,我将同样的错误写了 2 次,而且它只能被捕获一次,一旦我将 logger.error('Opps we got an error') 更改为 print "test",我打印了一次“test”。

可能是什么问题和解决方案。

问候

最佳答案

每次调用该函数时,您都会向根记录器添加一个新的 FileHandler:调用 logger.getLogger() 时不带名称参数,每次都会返回相同的记录器对象。

您应该只调用一次 generate_logger(),然后通过调用 logger.getLogger() 简单地获取相同的记录器对象:

generate_logger()

# .... some time later

log = logger.getLogger()
except AttributeError:
   log.error('Opps we got an error')

(请注意,您现在不需要 generate_logger() 来返回值)

关于python记录器多次记录相同的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3467524/

相关文章:

c# - try catch 在 WinForms 应用程序中无法正常工作

c# - 从 Called 函数抛出异常到 Caller Function 的 Catch block

java - 确定来自另一个 Java 应用程序的 Java 执行是否成功完成

java - log4j2 如何从文件中读取属性变量到 log4j2

python - 如何从以前保存的 splinter 实例中在 splinter 中设置 cookie?

Python:Python.h 文件丢失

python - Python 3 内置类型之间有什么关系?

c++ - 如何修复 bad_typeid 异常

linux - 合并 log4j 日志行

python - 回滚多用途 python 脚本的最佳实践