【问题标题】:Take an action each time a log is rotated in python每次在 python 中轮换日志时执行一个操作
【发布时间】:2016-10-18 20:35:15
【问题描述】:

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

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

我目前的示例代码是:

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 首先写入日志文件。
我该怎么做?

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

【问题讨论】:

    标签: python logging log-rotation


    【解决方案1】:

    也许您可以简单地覆盖 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)
    

    【讨论】:

    • 看起来它可以完成这项工作。我试过了,它显示一个错误,super() takes at least 1 argument. None given.
    • 这是 Python 3 语法:如果您使用的是 Python 2,则语法为 super(CustomFileHandler, self).doRollover()
    猜你喜欢
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    • 2017-08-31
    • 2017-11-15
    • 2016-10-10
    • 2014-01-06
    • 2017-02-22
    • 2017-02-01
    相关资源
    最近更新 更多