Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:多个记录器将日志写入类似的文件_Python_Logging - Fatal编程技术网

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

Python:多个记录器将日志写入类似的文件,python,logging,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') form

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

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)
现在我的问题是-在一个日志文件中,有预期输入字符串的日志,但同时还有其他输入字符串的日志-最后追加。 这些日志也会出现在它们的日志文件中


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

logger=logging.getLogger(logger\u name)调用将始终为给定的
logger\u name
返回相同的
logger
对象。这里发生的情况是,每次调用
setup\u 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

因此'/opt/data/'+argv[0]+'.log'包含'/opt/data/'+argv[1]+'.log'的日志?@user3125280号。。它也有argv[2]或argv[3]或两者的日志。-没有具体的模式。。