Python:多个记录器将日志写入相似的文件

标签 python logging

根据要求,我需要为所有输入生成单独的日志文件,并将其保存到单独的目录中。代码如下-

def setup_logger(logger_name, log_filename):
    import logging
    logger = logging.getLogger(logger_name)
    logger.setLevel(logging.DEBUG)
    file_handler = logging.FileHandler(log_filename, 'w')
    formatter = logging.Formatter(_FORMAT)
    file_handler.setFormatter(formatter)
    logger.addHandler(file_handler)
    return logger

此函数将在处理输入之前调用 -

logger = None

def foo(input_string):
    global logger
    logger = setup_logger('app', '/opt/data/'+input_string+'.log')

    # do processing and dumping into logs
    # this function will call one recursive function to process data
    logger = None # destroying logger object

if __name__ == "__main__":
    import sys

    for inp in sys.argv[1:]:
        foo(inp)

现在我的问题是 - 在一个日志文件中,有预期的 input_string 的日志,但随之而来的是其他 input_string 的日志 - 最后附加。 这些日志也将出现在它们的日志文件中。

对于这个奇怪的问题有什么想法吗?

最佳答案

对于给定的 logger_namelogger =logging.getLogger(logger_name) 调用将始终返回相同的 Logger 对象。这里发生的情况是,每次调用 setup_logger 时,您都会向“app”记录器添加一个 FileHandler

首先尝试删除所有处理程序,例如:

def setup_logger(logger_name, log_filename):
    import logging
    logger = logging.getLogger(logger_name)
    logger.setLevel(logging.DEBUG)
    file_handler = logging.FileHandler(log_filename, 'w')
    formatter = logging.Formatter(_FORMAT)
    file_handler.setFormatter(formatter)

    # Replace the previous handlers with the new FileHandler
    for old_handler in logger.handlers:
        logger.removeHandler(old_handler)
    logger.addHandler(file_handler)

    return logger

关于Python:多个记录器将日志写入相似的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20811934/

相关文章:

python - 在 Python 中重新编码类似于 R ifelse 的变量

python - 使用 xlsxwriter 自动扩展行

python - 对于每组对 REST API 函数的调用,仅发送一封电子邮件

python - 在 python 的两层循环中使用相同的变量时发生了什么?

c# - 如何在.NET中将StreamWriter的源设置为多个?

python - 在 Django Heroku 应用程序中使用 print() 日志记录将信息记录到 Papertrail 的好处

ruby - 有没有办法在 Ruby YAML 文件中指定 ruby​​ 类/模块常量作为值

python - z3Py:将 BoolRef 转换为一位 BitVecRef

java - 在 Groovy 脚本中使用 @Field 变量

Spring 框架中的 java 日志记录与 Log4j。哪一个最合适