TimedRotatingFileHandler Изменение имени файла?

Я пытаюсь реализовать обработчик каротажа 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 – текущий день.

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

5 Solutions collect form web for “TimedRotatingFileHandler Изменение имени файла?”

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

Поскольку он не документирован, я решил прочитать источник. Это я и сделал, читая источник 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) 

Суффикс – это строка форматирования.

Существует еще один подход к этой проблеме: например, мне нужно ежедневно поворачивать журналы, но они должны быть названы суффиксом в формате% 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 

Благодарю.

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

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

Спасибо Тхо.

Просто обновление, у меня закончился другой подход.

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

Я делаю это:

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

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

🙂

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

 handler.suffix = "%Y%m%d" handler.extMatch = re.compile(r"^\d{8}$") 
Python - лучший язык программирования в мире.