如何在日志文件名中添加日期时间?
当我创建日志文件时,我希望文件名里包含当前的日期和时间。
在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'