raise ValueError("Invalid format '%s' for '%s' style" % (self._fmt, self.default_format[0]))
def _format(self, record):
return self._fmt % record.__dict__ # 格式化日志记载对象
def format(self, record):
try:
return self._format(record)
except KeyError as e:
raise ValueError('Formatting field not found in record: %s' % e)
滚动日志文件处置器线上的日志继续输入到一个文件的话,会让文件庞大,即有加剧了丧失的风险,也难以处置。通常有按照大小滚动或许按照日期滚动的办法,这个功用十分重要。先看滚动日志处置器模版:
class BaseRotatingHandler(logging.FileHandler):
def emit(self, record):
try:
if self.shouldRollover(record): # 判别能否需求滚动
self.doRollover() # 滚动日志
logging.FileHandler.emit(self, record) # 输入日志
except Exception:
self.handleError(record)
def rotate(self, source, dest):
if not callable(self.rotator):
if os.path.exists(source):
os.rename(source, dest) # 重命名日志文件
else:
self.rotator(source, dest)
按大小滚动 RotatingFileHandler按照文件大小滚动的处置器:
class RotatingFileHandler(BaseRotatingHandler):
def __init__(self, filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=False):
if maxBytes > 0:
mode = 'a'
BaseRotatingHandler.__init__(self, filename, mode, encoding, delay)
self.maxBytes = maxBytes # 单个文件大小下限
self.backupCount = backupCount # 日志备份数量
def doRollover(self): # 执行滚动
if self.stream:
self.stream.close() # 封锁以后的流
self.stream = None
if self.backupCount > 0:
(责任编辑:admin)