首页 > 解决方案 > Python 日志记录:使用文件模式“w”时覆盖而不是附加

问题描述

我有一个每 60 秒运行一次的 Python 脚本。

在这个脚本中,我有一个打印消息的方法,并将其附加到1882.log

import praw
import os
import logging
from time import gmtime, strftime

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

def log_it(s):
    o = strftime("%Y-%m-%d %H:%M:%S", gmtime()) + " GMT > " + s
    logging.info(o)
    print(o)

它在其他方法中被调用,如下所示:

log_it("Message here!")
# "2019-08-28 17:31:31 GMT > Message Here!"

我正在尝试将每条消息附加到现有历史记录中,但是每次脚本运行时,日志文件1882.log都会以某种方式被覆盖,这意味着日志历史记录只是上次运行时输出的消息,而不是所有运行。

我知道filemode="w"将打开文件以进行附加而不是覆盖,所以我很困惑为什么每次运行此脚本时文件都会被完全覆盖。

为什么会这样?

标签: pythonlogging

解决方案


使用模式filemode="a"追加。根据文档,logging.basicConfig这也应该是默认值:

filemode - 如果指定了文件名,则以这种模式打开文件。默认为'a'.

您可以在该文档的链接中查看所有可用文件模式的概述:

...

'w'- 打开写入,首先截断文件

...

'a'- 打开写入,如果存在则附加到文件末尾

...

来源:https ://docs.python.org/3/library/functions.html#filemodes


推荐阅读