我有一个每天运行的 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。您还可以参考此主题以获得更详细的解释。