Python TimedRotatingFileHandler 旋转是如何发生的

标签 python python-3.x logging log-rotation

所以,在阅读文档和几个 stackoverflow 问题并在 Python 3.4 中尝试后,我不明白。它什么时候旋转以及在什么条件下旋转?

有 2 个线程,它们永远不会停止。他们调用此代码(我知道记录器已经是单例,实用程序中有更多不相关的代码):

import logging
from singleton import Singleton
from logging.handlers import TimedRotatingFileHandler

class Utility(metaclass=Singleton):

    def _logger(self):
        logger = logging.getLogger("main")
        logger.setLevel(logging.INFO)
        if not logger.hasHandlers():
            handler = TimedRotatingFileHandler(
                filename = "info.log",
                when = 's',
                interval = 10,
                backupCount = 10,
                encoding = 'utf-8'
            )
            logger.addHandler(handler)
        return logger

    def log(self, *text):
        self._logger().info(' '.join(str(t) for t in text))

最佳答案

据我所知,只有记录新条目时才会发生轮换(嗯,这是有道理的,不是吗?)。

这就是正在发生的事情:log() 调用 handle() ,它又调用 emit() (BaseRotatingHandler 在你的情况下 https://github.com/python/cpython/blob/829b49cbd2e4b1d573470da79ca844b730120f3d/Lib/logging/handlers.py#L63 ):

def emit(self, record):
    """
    Emit a record.
    Output the record to the file, catering for rollover as described
    in doRollover().
    """
    try:
        if self.shouldRollover(record):
            self.doRollover()
        logging.FileHandler.emit(self, record)
    except Exception:
        self.handleError(record)

所以你可以看到有两个方法涉及到旋转:shouldRollover()doRollover()。它们在您的 TimedRotatingFileHandler ( https://github.com/python/cpython/blob/829b49cbd2e4b1d573470da79ca844b730120f3d/Lib/logging/handlers.py#L193 ) 上定义,并且非常简单。

关于Python TimedRotatingFileHandler 旋转是如何发生的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31917915/

相关文章:

python - 使用 Pandas 读取空格分隔的数据

Python DNS 服务器

python - 没有 for 循环的 numpy 数组中的字典列表

logging - 如何使用 Spring Data 创建一个上限集合? - MongoDB

python - celery 记录 : consistent way to log inside and outside of a task

python - s.replace string方法,循环遍历字符串

python-3.x - 如何获取 py.test session 的标记列表?

python-3.x - 使用部署的 Azure 函数从 Blob 存储下载文件非常慢

java - 创建记录器时如何避免重复自己?

python - 如何在 python 中将完整输出写入文件而不附加