因此,在阅读了文档和几个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))
答案 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()
因此,您可以看到轮换涉及两种方法:TimedRotatingFileHandler
和class 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)上定义的,非常简单。