在 python 中每次轮换日志时采取行动

Take an action each time a log is rotated in python

我想记录一行描述记录器创建的每个日志文件的记录信息。

目前我正在使用一个单独的记录器进程,它将一直 运行。它从队列中接收信息并将其写入日志。许多模块会将信息传递到此日志记录队列。

我当前的示例代码是:

import logging
import time

from logging.handlers import TimedRotatingFileHandler as rotate

def info_log(log_queue):
    logger = logging.getLogger("My Log")
    logger.setLevel(logging.INFO)

    handler = rotate("log/info.log", when="D", interval=30, backupCount=13)
    logger.addHandler(handler)

    desc_string = "yyyy/mm/dd-HH:MM:SS \t name \t country \n"
    logger.info(desc_string)

    while True:
        result=log_queue.get().split("#")
        logger.info(result[0] + "\t" result[1] + "\t" + result[2] + "\n")

每次轮转日志时,我希望 desc_string 第一次写入日志文件。
我该怎么做?

或者换句话说,如何在程序中知道日志何时轮换?

也许您可以简单地覆盖 TimedRotatingFileHandler 中的 doRollover 方法?

class CustomFileHandler(TimedRotatingFileHandler):
  def doRollover(self):
     super().doRollover()
     self.stream.write(desc_string)

# to use it 
handler = CustomFileHandler("log/info.log", when="D", interval=30, backupCount=13)
logger.addHandler(handler)