我正在尝试对logging
模块的RotatingFileHandler进行如下测试:
from logging import getLogger, Formatter
from logging.handlers import RotatingFileHandler
MAX_LOG_SIZE = 2000
_null = lambda *s: None
LOG_FORMAT = '%(process)d [%(name)s %(asctime)s] %(levelname)s: %(message)s'
class Logger(object):
__slots__ = '_Logger__logger'
def __init__(self, name='main'):
self.__logger = getLogger(name)
if not self.__logger.handlers:
self.add_handler(name)
def add_handler(self, name):
file_name = 'log.log'
handler = RotatingFileHandler(file_name, 'a+', MAX_LOG_SIZE)
handler.setFormatter(Formatter(LOG_FORMAT))
self.__logger.addHandler(handler)
self.__logger._file_name = file_name
def ERROR(self, msg, *args):
self.__logger.error(msg, *args, **{})
if __name__ == '__main__':
logger = Logger()
for i in range(1000):
logger.ERROR('logger.content')
但是,使用MAX_LOG_SIZE = 2000时,log.log文件的结果包含的数据太多,大于2000字节
如何限制日志文件的最大大小?
答案 0 :(得分:2)
您需要更仔细地阅读documentation:您错过了maxBytes
和backupCount
。
替换此
handler = RotatingFileHandler(file_name, 'a+', MAX_LOG_SIZE)
这个
handler = RotatingFileHandler(file_name, 'a+', maxBytes=MAX_LOG_SIZE, backupCount=5)
请注意,您应设置一个符合您需求的backupCount
值,我只是随机使用。
进一步解释为什么您的代码段不会滚动文件是因为值backupCount
为0.请参阅以下内容:
您可以使用maxBytes和backupCount值来允许文件 以预定尺寸翻转。当大小即将来临时 超出,文件关闭,并以静默方式打开一个新文件 输出。只要当前日志文件差不多就会发生翻转 maxBytes的长度; 但如果maxBytes或backupCount为零, 永远不会发生翻转,因此您通常希望将backupCount设置为 至少为1,并且maxBytes为非零。