根据要求,我需要为所有输入生成单独的日志文件,并将其保存到单独的目录中。代码如下-
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_name
,logger =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/