使用 FileHandler 的 mode='w' 参数时,记录到 python 文件不会覆盖文件

Logging to python file doesn't overwrite file when using the mode='w' argument to FileHandler

提问人:CiaranWelsh 提问时间:7/16/2016 最后编辑:vvvvvCiaranWelsh 更新时间:4/4/2023 访问量:17305

问:

我有一些代码可以在 Python 2.7 中设置日志(使用日志模块):

import os
import logging
logger=logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
log_filename=os.path.join(os.path.dirname(copasi_file),os.path.split(copasi_file)[1][:-4]+'_log.log')
handler=logging.FileHandler(log_filename,mode='w')
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.debug('debugging message')

这段代码有效,我正在获得输出,但是我打算使用此日志进行大量调试,因此我想在每次运行时覆盖日志文件。在文档中,说使用“FileHandlermode='w''”的关键字参数。然而,这是行不通的。谁能告诉我为什么?mode. It doesn't specify precisely *which* mode to use for overwrite file each time but I think a reasonable assumption would be

日志 记录 python-logging

评论

0赞 niemmi 7/16/2016
我无法重现该行为。我使用了您提供的代码,只是更改了文件名,每次运行代码时日志都会被覆盖。如果我更改为 然后 new run 将行添加到末尾,modea
0赞 CiaranWelsh 7/16/2016
这很奇怪,可能与我之前遇到的一个问题有关。您知道是否可以永久覆盖日志记录模块的基本行为吗?
0赞 niemmi 7/16/2016
我不知道有什么办法可以做到这一点,但这并不意味着这是不可能的,

答:

5赞 AndrewG 7/16/2016 #1

我对此不太熟悉,而且我没有真正在谷歌中看到任何突出的东西。您是否尝试过仅使用:

    handler=logging.FileHandler(log_filename, 'w')

评论

0赞 CiaranWelsh 7/16/2016
谢谢,但这表现方式相同。
9赞 CiaranWelsh 7/16/2016 #2

问题在于,在启动新的 python shell 之前,该文件实际上不会被覆盖。

21赞 NutCracker 8/27/2018 #3

这为我解决了问题:

handler = logging.FileHandler(log_filename, 'w+')