Python“记录”模块错误:多个模块未按顺序附加日志语句

时间:2020-10-04 20:53:37

标签: python python-2.7 logging

我正在编码一个项目,该项目具有多个模块,可用于Python 2.7中的旧版软件。我将所有模块的语句记录在一个名为debg.log的文件中。该代码从名为“ Automation.py”的主python文件运行,然后调用多个模块,其中一个模块名为“ builds.py”。我希望将日志语句打印到debg.log文件上,以使其与python模块中的语句执行顺序相同。 例如:在实际的代码中,首先运行Automation.py并首先输出:“这是主文件。”和“它调用其他模块”。然后,它将调用另一个模块“ builds.py”,该模块将输出“我被第一个文件调用”。然后命令序列返回到主文件“ Automation.py”,并打印出“程序已结束”。 在我的程序中,当我使用记录器时,序列在debg.log中这样打印: 打印出“程序已结束”。因此,基本上不会打印第二个模块中的打印内容。 现在,我必须确保每次执行程序时,在debg.log中输出的输出都是新的,因此我必须使用mode ='w',因为不应将日志附加到以前的日志中。那就是问题所在,就好像我将mode ='w'放在模块'builds.py'中一样,它首先截断了'Automation.py'中的日志,然后当命令返回到'Automation.py'中时,截断“ builds.py”中的日志。请帮助说明我应该如何组织文件模式,以使所有内容都按顺序打印,并且不会被截断。 下面是主模块代码的记录器部分

//Small snippet of logger code in Automation.py
#import logger

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

formatter = logging.Formatter('%(message)s')

file_handler = logging.FileHandler('debg.log', mode='w')
file_handler.setFormatter(formatter)
stream_handler = logging.StreamHandler()
logger.addHandler(file_handler)
logger.addHandler(stream_handler)

这是第二个模块的记录器部分

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

formatter = logging.Formatter('%(message)s')

file_handler = logging.FileHandler('debg.log', mode='w')
file_handler.setFormatter(formatter)
stream_handler = logging.StreamHandler()
logger.addHandler(file_handler)
logger.addHandler(stream_handler)

是的,我说过我通过更改文件的模式使用了多种不同的方案,以便它可以正确打印在日志文件上,但是它不起作用。它唯一按顺序打印的时间是不包括该模式的时间,因此它默认为附加模式。但是随后,日志只是不断追加到debg.log上,这不是我想要的。

0 个答案:

没有答案
相关问题