想在日志文件名中使用datetime

时间:2012-02-03 21:44:16

标签: python

当我创建日志文件时,我希望名称包含日期时间。

现在,在python中,您可以将当前日期时间设置为:

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

str版本是

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

附加到日志文件名称不是一个非常好的str!我希望我的日志文件类似于:

mylogfile_21_35_03_02_2012.log

python可以做些什么来让这很容易吗?请注意,我正在创建日志文件

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

任何提示?

7 个答案:

答案 0 :(得分:33)

您还可以使用TimedRotatingFileHandler来处理日期和每日翻转(或者您想要的任何时间)。

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

默认情况下,格式取决于翻转间隔:

  

系统将通过附加文件名扩展名来保存旧日志文件。扩展是基于日期和时间的,使用strftime格式%Y-%m-%d_%H-%M-%S或其前导部分,具体取决于翻转间隔。

但您可以通过执行以下操作来修改here所示的内容:

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

答案 1 :(得分:27)

您需要datetime.strftime(),这允许您使用C's strftime()的所有指令格式化时间戳。在您的具体情况下:

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

答案 2 :(得分:7)

是。查看日期时间API,尤其是strftime

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

答案 3 :(得分:2)

我们可以使用datetime.now()获取当前时间戳。这是我用来创建带有时间戳记的日志文件的代码-

import logging
from datetime import datetime
LOG_FILENAME = datetime.now().strftime('D:/log/logfile_%H_%M_%S_%d_%m_%Y.log')
for handler in logging.root.handlers[:]:
      logging.root.removeHandler(handler)
logging.basicConfig(filename=LOG_FILENAME,level=logging.DEBUG)    
logging.info('Forecastiong Job Started...')
logging.debug('abc method started...')

答案 4 :(得分:2)

使用format()的另一种解决方案:

#generates a date for a generic filename
import datetime
date_raw = datetime.datetime.now()
date_processed = "{}-{}-{}_{}-{}-{}".format(date_raw.year, date_raw.month, 
                  date_raw.day, date_raw.hour, date_raw.minute, date_raw.second)
#example value: date_processed = 2020-1-7_17-17-48

我在自己的项目中使用了它
编辑:当我发现有关f(ormatted)字符串时,这将是另一种解决方案:

date_processed = f"{date_raw.year}-{date_raw.month}-{date_raw.day}_{date_raw.hour}-{date_raw.minute}-{date_raw.second}"

答案 5 :(得分:0)

from time import strftime

fh = logging.FileHandler(strftime("mylogfile_%H_%M_%m_%d_%Y.log"))

答案 6 :(得分:-1)

要打印hourminutesdaymonthyear,请使用以下声明

来自datetime导入datetime

print datetime.now().strftime("%H_%M_%d_%m_%Y")