Хотите, чтобы datetime в имени файла журнала

Когда я создаю свой файл журнала, я хочу, чтобы имя содержало дату и время.

Теперь, в python, вы можете получить текущее datetime как:

>>> 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'

Не очень хорошая строка для добавления имени файла журнала! Я бы хотел, чтобы мой файл журнала выглядел примерно так:

mylogfile_21_35_03_02_2012.log

Можно ли что-то сделать python, чтобы сделать это проще? Заметьте, я создаю файл журнала как

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

Любые советы?

Ответы

Ответ 1

Вам нужно datetime.strftime(), это позволяет отформатировать временную метку, используя все директивы C strftime(). В вашем конкретном случае:

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

Ответ 2

Вы также можете использовать TimedRotatingFileHandler, который будет обрабатывать дату и опрокидывание каждый день (или всякий раз вы хотите) для вас.

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

По умолчанию формат будет зависеть от интервала опроса:

Система сохранит старые файлы журналов, добавив расширения к имени файла. Расширения основаны на дате и времени, используя формат strftime %Y-%m-%d_%H-%M-%S или его ведущую часть, в зависимости от интервала опрокидывания.

Но вы можете изменить это, как показано здесь, выполнив что-то вроде:

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

Ответ 3

Да. Посмотрите API-интерфейс datetime, в частности strftime.

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

Ответ 4

from time import strftime

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

Ответ 5

Мы можем использовать 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...')

Ответ 6

Чтобы напечатать hour, minutes, day, month и year, используйте следующую инструкцию

от datetime и datetime datetime импорта datetime

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