自动删除旧的Python日志文件

Mat*_*rei 7 python logging

我有一个每天运行的 Python 程序。我使用loggingFileHandler 模块将日志写入文件。我希望每次运行的日志都位于其自己的带有时间戳的文件中。但是,我想删除旧文件(例如 > 3 个月)以避免填满磁盘。

我查看了 RotatingFileHandler 和 TimedRotatingFileHandler,但我不希望单次运行的日志被分割到多个文件中,即使单次运行需要几天时间。有内置方法吗?

cqx*_*cqx 15

日志记录模块有一个内置的 TimedRotatingFileHandler:

# import module
from logging.handlers import TimedRotatingFileHandler
from logging import Formatter

# get named logger
logger = logging.getLogger(__name__)

# create handler
handler = TimedRotatingFileHandler(filename='runtime.log', when='D', interval=1, backupCount=90, encoding='utf-8', delay=False)

# create formatter and add to handler
formatter = Formatter(fmt='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)

# add the handler to named logger
logger.addHandler(handler)

# set the logging level
logger.setLevel(logging.INFO)

# --------------------------------------

# log something
logger.info("test")

Run Code Online (Sandbox Code Playgroud)

旧日志会自动附加时间戳。

每天都会创建一个新的备份。

如果存在超过 91 个(当前+备份)文件,最旧的文件将被删除。


Jor*_*nGS -1

获取日期/时间。有关如何获取时间戳的信息,请参阅此答案。如果文件比当前日期早 3 个月。然后删除它

import os
os.remove("filename.extension")
Run Code Online (Sandbox Code Playgroud)

将此文件保存到py2exe,然后只需使用任何任务计划程序在启动时运行此作业。

Windows:打开运行命令并输入shell:startup,然后将您的 exe 放入此处。

在 OSX 上:过去的旧方法是创建 cron 作业,根据我的经验,这在很多情况下不再起作用,但仍在尝试中。苹果新推荐的方式是CreatingLaunchdJobs。您还可以参考此主题以获得更详细的解释。

  • 感谢您的回复,但问题是日志记录模块本身在哪里支持这种功能。创建一个单独的程序来处理它非常简单。 (3认同)