Python TimedRotatingFileHandler如何进行旋转

时间:2015-08-10 11:05:26

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

因此,在阅读了文档和几个stackoverflow问题并在Python 3.4中尝试之后,我得不到它。它什么时候旋转?在什么条件下?

有两个主题,他们永远不会停止。他们称这个代码(我知道记录器已经是单例,在Utility中有更多不相关的代码):

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))

1 个答案:

答案 0 :(得分:2)

据我所知,只有记录了一个新条目才会发生轮换(好吧,它有意义,不是吗?)。

这就是正在发生的事情:log()调用handle()来调用emit()BaseRotatingHandler 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()

因此,您可以看到轮换涉及两种方法:TimedRotatingFileHandlerclass TBase { public: int a; virtual void Foo() {a = 1;} void Exec() {Foo();} }; class TDerived : public TBase { public: virtual void Foo() {a = 2;} }; TBase *Base; //pointer to object in heap TBase Base2; //static object TDerived *Derived; //pointer to object in heap TDerived Derived2; //static object int main() { Base = new TBase; Base->Exec(); //this passes okay Base2.Exec(); //this passes okay Derived = new TDerived; Derived->Exec(); //this passes okay Derived2.Exec(); //here I get an exception and the app crashes return 0; } 。它们是在<add key="webpages:Enabled" value="true" /> https://github.com/python/cpython/blob/829b49cbd2e4b1d573470da79ca844b730120f3d/Lib/logging/handlers.py#L63)上定义的,非常简单。