有人能解释一下为什么在RotatingFileHandler
上设置maxBytes
会导致每个日志记录调用DerivedFormatter.format()
两次吗?最后,只有一个条目进入日志文件,但是我希望在DerivedFormatter.format()
中执行一些不应该多次执行的逻辑。
示例:
# Python 3.10.6
import logging
from logging.handlers import RotatingFileHandler
class DerivedFormatter(logging.Formatter):
def __init__(self, fmt=None, datefmt=None, style='%'):
super().__init__(fmt, datefmt, style)
def format(self, record):
print("format_override called.")
return super().format(record)
format = '%(asctime)s | %(levelname)-8s | %(filename)s | %(message)s'
log_file = "fubar.log"
Log = logging.getLogger()
Log.handlers.clear()
Log.setLevel(logging.DEBUG)
fhandler = RotatingFileHandler(log_file)
fhandler.maxBytes = 102400 # comment this line
fhandler.backupCount = 1
fhandler.setFormatter(DerivedFormatter(format))
Log.addHandler(fhandler)
Log.info("something happened")
当注解掉设置fhandler.maxBytes
的行时,DerivedFormatter.format()
只被调用一次。
先谢谢你了。
1条答案
按热度按时间u5rb5r591#
感谢Michael Ruth的评论,并让我的调试器给予我更多的信息,了解正在发生的事情。
RotatingFileHandler.shouldRollover()
检查是否为maxBytes > 0
,然后调用format()
以获取格式化的消息并检查长度。谢谢迈克尔的帮助!