
Python使用RotatingFileHandler实现日志自动切割程序运行时间长了以后日志文件可能不断增大不仅占用磁盘空间打开和检索也会越来越慢。Python自带的RotatingFileHandler可以按照文件大小自动切割日志并保留指定数量的历史文件。一、基本实现importloggingfromlogging.handlersimportRotatingFileHandler loggerlogging.getLogger(my_app)logger.setLevel(logging.INFO)handlerRotatingFileHandler(filenameapp.log,maxBytes5*1024*1024,backupCount5,encodingutf-8)formatterlogging.Formatter(%(asctime)s | %(levelname)s | %(message)s)handler.setFormatter(formatter)logger.addHandler(handler)logger.info(程序启动)logger.warning(这是一条警告日志)logger.error(这是一条错误日志)二、参数说明maxBytes表示单个日志文件允许的最大大小。示例中设置为5MB当app.log超过限制后程序会自动生成app.log app.log.1 app.log.2 app.log.3backupCount表示最多保留多少个历史日志文件。超过设定数量后最旧的日志会被自动删除。三、避免日志重复输出如果初始化代码被多次调用同一个处理器可能被重复添加导致每条日志输出多次。可以在添加前进行判断ifnotlogger.handlers:logger.addHandler(handler)完整写法importloggingfromlogging.handlersimportRotatingFileHandlerdefcreate_logger():loggerlogging.getLogger(my_app)logger.setLevel(logging.INFO)iflogger.handlers:returnlogger handlerRotatingFileHandler(app.log,maxBytes5*1024*1024,backupCount5,encodingutf-8)handler.setFormatter(logging.Formatter(%(asctime)s | %(levelname)s | %(filename)s:%(lineno)d | %(message)s))logger.addHandler(handler)returnlogger app_loggercreate_logger()app_logger.info(日志系统初始化完成)四、适用场景这种方式适合小型脚本、定时任务、爬虫和后台服务。对于高并发或多进程程序还需要考虑多个进程同时写入同一文件的问题。总结通过RotatingFileHandler可以在不安装第三方模块的情况下实现日志切割避免单个日志文件无限增长。合理设置文件大小和保留数量也能减少磁盘空间被日志占满的风险。