Могу ли я отложить ротацию файла журнала при использовании регистратора Twisted? - PullRequest
0 голосов
/ 08 февраля 2020

При использовании модуля logging для создания вращающихся файлов журнала я могу сказать регистратору отложить ротацию до тех пор, пока не будут записаны фактические данные, используя аргумент delay=True класса TimedRotatingFileHandler, например:

import time
import logging
from logging.handlers import TimedRotatingFileHandler

if __name__ == '__main__':
    handler = TimedRotatingFileHandler('logfile.log', when='midnight', delay=True)
    out_fmt = '[%(asctime)s.%(msecs)03dZ] [%(levelname)s] %(message)s'
    dt_fmt = '%Y-%m-%d %H:%M:%S'
    logging.Formatter.converter = time.gmtime
    formatter = logging.Formatter(out_fmt, dt_fmt)
    handler.setFormatter(formatter)
    root = logging.getLogger()
    root.setLevel(logging.DEBUG)
    root.addHandler(handler)

Это полезно, когда в журнал редко выводится какая-либо новая информация, например, если целый день не записывается ничего нового; тогда вы не хотите создавать пустой файл журнала для этого дня.

Можно ли добиться того же эффекта при использовании Twisted logger (twisted.python.logfile.DailyLogFile)?

1 Ответ

1 голос
/ 08 февраля 2020

Вы можете достичь желаемого поведения, просто переопределив функцию shouldRotate в DailyLogFile классе.

Что-то вроде ниже должно сделать трюк:

class CustomDailyLogFile(LogFile, DailyLogFile):
    def shouldRotate(self):
        return self.toDate() > self.lastDate and self.rotateLength and self.size >= self.rotateLength
...