Python中日志文件自动切换
参考官方文档:https://docs.python.org/2.6/library/logging.html#timedrotatingfilehandler
一、当日志文件达到指定大小,切换新的文件记录日志——RotatingFileHandler
- 该handler默认使用
a
的模式写入日志 maxBytes
和backupCount
必须配合使用,否则不会切换新文件
class logging.RotatingFileHandler(filename[, mode[, maxBytes[, backupCount[, encoding[, delay]]]]])
# maxBytes:控制单个日志文件的大小,单位是字节(B),也就是当单个文件大小超过这个数值时,就创建一个新的文件。
# backupCount:用于控制日志文件的数量,如果创建的日志文件数量多于这个数值,就删除最老的, 将通过将扩展名“.1”、“.2”等附加到文件名来保存旧的日志文件
例子:
- 该例子设置日志文件上限为100B,保留5个老的日志文件
import logging
from logging.handlers import RotatingFileHandler
logHandler = RotatingFileHandler("logfile", maxBytes=100, backupCount=5)
logFormatter = logging.Formatter('%(asctime)s %(name)-12s %(levelname)-8s %(message)s')
logHandler.setFormatter(logFormatter)
logger = logging.getLogger('MyLogger')
logger.addHandler(logHandler)
logger.setLevel(logging.INFO)
while True:
logger.info(str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())))
time.sleep(1)
二、当到达指定时间,切换新的文件记录日志——TimedRotatingFileHandler
class logging.TimedRotatingFileHandler(filename[, when[, interval[, backupCount[, encoding[, delay[, utc]]]]]])
# when:什么时候切换到一个新的文件记录日志
# backupCount:用于控制日志文件的数量,如果创建的日志文件数量多于这个数值,就删除最老的,默认是0,不会自动删除
when可选列表:
Value | Type of interval |
---|---|
S |
等待1秒切换到一个新日志文件 |
M |
等待1分钟切换到一个新日志文件 |
H |
等待1小时切换到一个新日志文件 |
D |
等待1天切换到一个新日志文件 |
W |
等待1星期切换到一个新日志文件 (0=Monday) |
midnight |
每天0点切换到新的日志文件 |
例如:
- 该例子指定等待1分钟切换到一个新的文件记录日志
import logging
from logging.handlers import TimedRotatingFileHandler
logHandler = TimedRotatingFileHandler("logfile", when="M")
logFormatter = logging.Formatter('%(asctime)s %(name)-12s %(levelname)-8s %(message)s')
logHandler.setFormatter(logFormatter)
logger = logging.getLogger('MyLogger')
logger.addHandler(logHandler)
logger.setLevel(logging.INFO)
while True:
logger.info(str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())))
time.sleep(1)
博客内容仅供参考,部分参考他人优秀博文,仅供学习使用