gpt4 book ai didi

python - 在 Python 中编写仅追加 gzip 日志文件

转载 作者:太空狗 更新时间:2023-10-29 22:27:12 25 4
gpt4 key购买 nike

我正在构建一项服务,用于记录来自多个来源(每个来源一个文件)的纯文本格式日志。我不打算轮换这些日志,因为它们必须永远存在。

为了让这些永远围绕着文件变小,我希望我可以快速压缩它们。由于它们是日志数据,因此文件压缩得很好。

在 Python 中编写仅附加 gzip 文本文件的好方法是什么,以便在服务打开和关闭时可以稍后恢复写入?我并不担心丢失几行,但如果 gzip 容器本身出现故障并且文件变得不可读,那就不行了。

此外,如果不行,我可以简单地将它们写成纯文本而不用 gzip 压缩,如果这不值得麻烦的话。

最佳答案

注意:在 unix 系统上你应该认真考虑使用一个外部程序,为这个任务编写:

  • logrotate (旋转、压缩和邮寄系统日志)

您可以将旋转 的数量设置得如此之高,以至于第一个文件将被删除in 100 years左右。


在 Python 2 中,logging.FileHandler 接受一个关键字参数 encoding,可以设置为 bz2zlib.

这是因为记录 uses codecs 模块,它将 bz2(或 zlib)作为编码:

>>> import codecs
>>> with codecs.open("on-the-fly-compressed.txt.bz2", "w", "bz2") as fh:
... fh.write("Hello World\n")

$ bzcat on-the-fly-compressed.txt.bz2
Hello World

Python 3 版本(尽管文档 mention bz2 作为别名,您实际上必须使用 bz2_codec - 至少 w/3.2.3):

>>> import codecs
>>> with codecs.open("on-the-fly-compressed.txt.bz2", "w", "bz2_codec") as fh:
... fh.write(b"Hello World\n")

$ bzcat on-the-fly-compressed.txt.bz2
Hello World

关于python - 在 Python 中编写仅追加 gzip 日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14636640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com