如何在日志文件名中添加日期时间?

44 投票
7 回答
74668 浏览
提问于 2025-04-17 12:17

当我创建日志文件时,我希望文件名里包含当前的日期和时间。

在Python中,你可以这样获取当前的日期和时间:

>>> from datetime import datetime
>>> datetime.now()
datetime.datetime(2012, 2, 3, 21, 35, 9, 559000)

它的字符串形式是

>>> str(datetime.now())
'2012-02-03 21:35:22.247000'

这个字符串格式不太好,不适合直接加到日志文件名里!我希望我的日志文件名能像这样:

mylogfile_21_35_03_02_2012.log

Python有没有什么简单的方法可以做到这一点?我现在是这样创建日志文件的:

fh = logging.FileHandler("mylogfile" + datetimecomp + ".log")

7 个回答

8

是的。你可以看看日期时间的API,特别是 strftime 这个函数。

from datetime import datetime
print datetime.now().strftime("%d_%m_%Y")
46

你也可以使用一个叫做 TimedRotatingFileHandler 的工具,它可以帮你自动处理日志文件的日期和每天的轮换(或者你想要的任何时间)。

from logging.handlers import TimedRotatingFileHandler
fh = TimedRotatingFileHandler('mylogfile',  when='midnight')

默认情况下,日志文件的格式会根据轮换的时间间隔而变化:

系统会通过在文件名后面加上扩展名来保存旧的日志文件。这些扩展名是基于日期和时间的,使用的格式是 %Y-%m-%d_%H-%M-%S,或者根据轮换的时间间隔使用这个格式的一部分。

不过,你可以像 这里 所示的那样来修改这个格式,做一些类似于:

from logging.handlers import TimedRotatingFileHandler
fh = TimedRotatingFileHandler('mylogfile',  when='midnight')
fh.suffix = '%Y_%m_%d.log'
51

你需要用到 datetime.strftime() 这个功能,它可以让你用各种格式来处理时间戳,这些格式都是来自于 C语言的 strftime()。在你的具体情况下:

>>> datetime.now().strftime('mylogfile_%H_%M_%d_%m_%Y.log')
'mylogfile_08_48_04_02_2012.log'

撰写回答