根据要求,我需要为所有输入生成单独的日志文件,这将转到单独的目录。代码如下 -
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_strings的日志 - 最后附加。 这些日志也会出现在他们的日志文件中。
对这个奇怪的问题有什么想法?
答案 0 :(得分:3)
logger = logging.getLogger(logger_name)
调用将始终为给定的Logger
返回相同的logger_name
对象。这里发生的事情是,每次拨打FileHandler
时,您都会向“app”记录器添加一个setup_logger
。
首先尝试并删除所有处理程序,例如:
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