TimedRotatingFileHandler Изменение имени файла? - PullRequest
12 голосов
/ 03 декабря 2008

Я пытаюсь реализовать обработчик журналирования Python под названием TimedRotatingFileHandler.

При переносе на полночь текущий день добавляется в виде: "ГГГГ-ММ-ДД".

LOGGING_MSG_FORMAT  = '%(name)-14s > [%(levelname)s] [%(asctime)s] : %(message)s'
LOGGING_DATE_FORMAT = '%Y-%m-%d %H:%M:%S'

logging.basicConfig(
            level=logging.DEBUG,
            format=LOGGING_MSG_FORMAT,
            datefmt=LOGGING_DATE_FORMAT
            )
root_logger = logging.getLogger('')
logger = logging.handlers.TimedRotatingFileHandler("C:\\logs\\Rotate_Test",'midnight',1)
root_logger.addHandler(logger)
while True:
    daemon_logger = logging.getLogger('TEST')
    daemon_logger.info("SDFKLDSKLFFJKLSDD")
    time.sleep(60)

Первый созданный файл журнала называется просто «Rotate_Test», затем, когда он переносится на следующий день, он меняет имя файла на: «Rotate_Test.YYYY-MM-DD» Где YYYY-MM-DD - текущий день.

Как я могу изменить, как это меняет имя файла? Я погуглил, посмотрел на API и почти ничего не нашел.

Ответы [ 5 ]

34 голосов
/ 03 декабря 2008

«Как я могу изменить, как это меняет имя файла?»

Поскольку это не задокументировано, я решил прочитать источник. Это то, что я пришел к выводу из чтения источника logging/handlers.py

handler = logging.handlers.TimedRotatingFileHandler("C:\\isis_ops\\logs\\Rotate_Test",'midnight',1)
handler.suffix = "%Y-%m-%d" # or anything else that strftime will allow
root_logger.addHandler(handler)

Суффиксом является строка форматирования.

2 голосов
/ 25 августа 2015

Вы можете сделать это, изменив суффикс журнала, как предложено выше, но вам также потребуется изменить переменную extMatch, чтобы она соответствовала суффиксу, чтобы найти повернутые файлы:

handler.suffix = "%Y%m%d"
handler.extMatch = re.compile(r"^\d{8}$")
2 голосов
/ 09 декабря 2009

Существует другой подход к этой проблеме: например, мне нужно ежедневно вращать журналы, но они должны иметь имена с суффиксом в формате% m% d% Y ...

Итак, я написал ремикс TimedRotatingFileHandler!

try:
    import codecs
except ImportError:
    codecs = None
import logging.handlers
import time
import os

class MyTimedRotatingFileHandler(logging.handlers.TimedRotatingFileHandler):
  def __init__(self,dir_log):
   self.dir_log = dir_log
   filename =  self.dir_log+time.strftime("%m%d%Y")+".txt" #dir_log here MUST be with os.sep on the end
   logging.handlers.TimedRotatingFileHandler.__init__(self,filename, when='midnight', interval=1, backupCount=0, encoding=None)
  def doRollover(self):
   """
   TimedRotatingFileHandler remix - rotates logs on daily basis, and filename of current logfile is time.strftime("%m%d%Y")+".txt" always
   """ 
   self.stream.close()
   # get the time that this sequence started at and make it a TimeTuple
   t = self.rolloverAt - self.interval
   timeTuple = time.localtime(t)
   self.baseFilename = self.dir_log+time.strftime("%m%d%Y")+".txt"
   if self.encoding:
     self.stream = codecs.open(self.baseFilename, 'w', self.encoding)
   else:
     self.stream = open(self.baseFilename, 'w')
   self.rolloverAt = self.rolloverAt + self.interval
1 голос
/ 04 декабря 2008

Просто обновление, в итоге я пошел другим путем.

Самый простой способ, который я нашел, чтобы изменить вывод файла, это просто использовать FileHandler, а затем, когда пришло время перевернуться.

Я делаю это:

if(current_time > old_time):
    for each in logging.getLogger('Debug').handlers:
      each.stream = open("C:\\NewOutput", 'a')

Вот суть этого. На это потребовалось много времени, чтобы осмотреться, но изменение потока - самый простой способ сделать это.

:)

1 голос
/ 04 декабря 2008

Спасибо.

Я посмотрел на источник.

На самом деле нет способа изменить его форму. Поскольку манипулирование суффиксом, только добавляет в конец имени файла. Эфирным способом, нет никакого реального способа манипулировать полным именем файла, я надеялся, что вы можете объявить маску файла, и когда он сделает «RollOver», он создаст новое имя файла на основе маски файла , Я просто собираюсь вернуться к своей первоначальной идее, состоящей в том, чтобы просто убить всю подсистему ведения журналов и повторно инициализировать ее с новым именем файла, когда произойдет откат.

Спасибо Тхо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...