凉城旧巷
Python从入门到自闭,Java从自闭到放弃,数据库从删库到跑路,Linux从rm -rf到完犊子!!!

Python中日志文件自动切换

参考官方文档:https://docs.python.org/2.6/library/logging.html#timedrotatingfilehandler

一、当日志文件达到指定大小,切换新的文件记录日志——RotatingFileHandler

  • 该handler默认使用a的模式写入日志
  • maxBytesbackupCount 必须配合使用,否则不会切换新文件
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)

posted on 2022-08-31 14:57  凉城旧巷  阅读(502)  评论(0编辑  收藏  举报