python - 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"
将打开文件以进行附加而不是覆盖,所以我很困惑为什么每次运行此脚本时文件都会被完全覆盖。
为什么会这样?
解决方案
使用模式filemode="a"
追加。根据文档,logging.basicConfig
这也应该是默认值:
filemode - 如果指定了文件名,则以这种模式打开文件。默认为
'a'
.
您可以在该文档的链接中查看所有可用文件模式的概述:
...
'w'
- 打开写入,首先截断文件...
'a'
- 打开写入,如果存在则附加到文件末尾...
来源:https ://docs.python.org/3/library/functions.html#filemodes
推荐阅读
- flutter - 更新behavioursubject对象的最佳实践?
- tensorflow - CPU 是否有实时对象检测算法?
- docker - docker容器中的terraform init出错-x509:证书由未知机构签名
- elasticsearch - 尝试为定义的 Elasticsearch 模板中缺少的字段建立索引
- php - 在 php 中注销时出现 500 内部服务器错误
- laravel - laravel 中的更新方法问题(不支持 POST 方法)
- angular - 如何获取打字稿对象的属性
- python - 在 .insert_picture() 之后访问 python-pptx 图片占位符时出错
- python - 如何将推荐 Keras 模型从 Tensorflow 示例导出到 tflite?
- reactjs - 使用 react-spring,如何在不提供“from”值的情况下使用“useSpring()”进行动画处理?