Python的logging.basicConfig不会覆盖现有的日志文件。

3

我正在使用Python的logging.basicConfig方法,传递一些参数,包括filemode = "w"。如果没有指定,默认为"a",即追加。然而,尽管指定了覆盖现有日志文件,但它仍在追加。

import logging
# add filemode "w" to overwrite
logging.basicConfig(filename = "sample.log", level = logging.INFO,filemode = "w")
logging.debug("This is a debug message")
logging.info("Informational message")
logging.error("An error has happened!")

1
我尝试了你的代码,对我来说运行良好,当 filemode = "w" 时它确实覆盖了日志文件。 - tidakdiinginkan
我在一天之后尝试了很多次,但仍然没有任何新的进展。它不断地追加。最终,我放弃了日志记录部分! - Mojtaba Abdi Khassevan
2个回答

5

使用以下代码并尝试 -

filemode = "w+"

示例

logging.basicConfig(filename = "sample.log",
                    level = logging.INFO,
                    filemode = "w+" )

1
在我的情况下: 在Google Colab中遇到了同样的问题: logging.basicConfig(filename="log_file", filemode='w', level=logging.DEBUG) 代码会将 log_file 追加,而不是覆盖...
我提前为这篇长篇大论道歉 - 我尝试澄清所有情况。我想要声明的是,在PyCharm中运行脚本时没有观察到这种效果。 我认为问题在于Anaconda(类似于我遇到同样问题的Google Colab),代码不是重新执行,而是使用以前执行的结果。根据理念,日志记录过程从程序启动的那一刻起就可以随时使用。这可能就是为什么有一个规则:(PEP: 282, 第 "Loggers" 部分) *"...否则, 如果存在具有该名称的记录器,则返回它。如果不存在,则初始化并返回一个新的记录器..."*在我们的情况下,我们需要重新启动内核以清除存储日志的文件的内容。出于好奇,我将尝试在不重新启动内核的情况下重置日志存储,但这已经是一种异常模式。

https://github.com/python/peps/blob/master/pep-0282.txt#L220


这并没有真正回答问题。如果您有不同的问题,可以通过点击提问来提出。一旦您拥有足够的声望,您还可以添加赏金以吸引更多关注此问题。- 来自审核 - Lucas Hendren
修正了,希望现在这条信息能够有助于找到问题的解决方案。 - Andrey Martynov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接