具有旋转文件内容的 Python 文件处理程序

Iri*_*ina 5 python logging

我编写了一个简单的日志记录程序,它将我发送给它的所有内容附加到一个文件中:

def log(message):
    with open ("log.txt", 'a+') as f:
        f.write(message + "\n")
Run Code Online (Sandbox Code Playgroud)

但是,我想限制该文件的大小。当它达到最大大小时,我希望它删除第一行并附加在底部。

这可以通过文件处理程序实现吗?还是我需要自己编写代码?我也可以使用旋转文件处理程序,但是我见过的所有示例都让环境在设置级别后自动写入异常,并且我需要控制写入文件的内容。

提前谢谢了!

Pir*_*jas 5

这是使用 python 内置 RotatingFileHandler 的示例:

import logging
from logging.handlers import RotatingFileHandler

# change to a file you want to log to
logFile = 'log_r.log'

my_handler = RotatingFileHandler(logFile, mode='a', maxBytes=5*1024*1024,
                                 backupCount=2, encoding=None, delay=0)
my_handler.setLevel(logging.INFO)

app_log = logging.getLogger('root')
app_log.setLevel(logging.INFO)
app_log.addHandler(my_handler)


def bad():
    raise Exception("Something bad")


if __name__ == "__main__":
    app_log.info("something")
    try:
        app_log.info("trying to run bad")
        bad()
    except Exception as e:
        app_log.info("That was bad...")
    finally:
        app_log.info("Ran bad...")
Run Code Online (Sandbox Code Playgroud)

该行为与您建议的行为略有不同,因为它不会从文件的开头删除,而是将文件移动到不同的文件名并从头开始。

请注意,当您运行此命令时,日志文件中显示的唯一内容是我们显式记录的文本片段 - 即没有您不想要的系统垃圾。