所以,在阅读文档和几个 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/