如何在Python中配置日志文件滚动更新(按时间或大小)?
RotatingFileHandler按大小轮转,TimedRotatingFileHandler按时间轮转;前者依赖maxBytes和backupCount控制单文件大小与保留数量,后者通过when、interval和atTime精确调度滚动时机,但均不支持多进程安全写入。
用 RotatingFileHandler 实现按大小滚动日志
当单个日志文件容易膨胀到几百MB甚至GB时,RotatingFileHandler 是最直接的解法。它不依赖外部工具,纯Python内置,适合大多数后台服务。
关键点在于控制单个文件上限和保留备份数量,否则磁盘可能被旧日志占满:
-
maxBytes设太小(比如 1KB)会导致频繁切文件,影响 I/O 性能;建议设为10*1024*1024(10MB)起 -
backupCount决定最多保留几个历史文件,设为5表示只留当前 + 最近 5 个,超出的自动删除 - 注意:它不会主动压缩旧文件,若需压缩,得自己在
doRollover()中重写逻辑或用TimedRotatingFileHandler配合backupCount
import logging
from logging.handlers import RotatingFileHandler
handler = RotatingFileHandler(
filename="app.log",
maxBytes=10*1024*1024,
backupCount=5,
encoding="utf-8"
)
logger = logging.getLogger("myapp")
logger.addHandler(handler)
logger.setLevel(logging.INFO)
用 TimedRotatingFileHandler 按时间滚动(如每天/每小时)
需要按自然周期归档(比如每天一个日志文件、每小时切一次),就选 TimedRotatingFileHandler。它支持 when 参数指定滚动单位,但行为容易被误解:
-
when="D"表示“每天午夜”,不是“运行后 24 小时”。如果程序凌晨 3 点启动,第一次滚动仍发生在次日 0 点 -
when="H"是整点滚动,不是“每 60 分钟”,即 14:00 启动,下次滚动是 15:00,不是 14:60(不存在) -
interval和when要匹配:设when="S"(秒)再配interval=30才是每 30 秒切一次;但高频滚动会生成大量小文件,慎用 - 默认文件名后缀是
.2024-05-20这类,若想带时分秒(如.2024-05-20_14),需设置utc=True或自定义suffix
为什么 TimedRotatingFileHandler 容易漏滚或重复滚?
根本原因是它靠首次写入时间推算下次滚动时刻,且不持久化记录。常见问题包括:
- 程序中途重启:如果上次滚动是 02:00,重启在 02:30,它会把“下一次该滚的时间”重算为 03:00,跳过 02:00–02:30 的间隔 —— 这段日志就全挤进 02:00 文件里
- 多进程写同一日志路径:各进程独立判断滚动时机,可能同时触发 rename,导致部分日志丢失或文件损坏(Python 官方明确不保证多进程安全)
- 系统时间回拨(如 NTP 校准):handler 可能误判“已到滚动点”,反复 rename 同一文件,产生
.2024-05-20.1、.2024-05-20.2等冗余后缀
解决办法只有两个:要么用外部日志轮转工具(如 logrotate),要么改用单进程 + 看门狗管理日志目录。
Python 3.14.3
微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。
生产环境更推荐组合方案:Rotating + 外部 logrotate
Python 自带 handler 在简单场景够用,但一旦涉及高可用、多实例、精确归档策略(比如“保留 30 天且自动 gzip”),硬靠 Python 处理反而增加不确定性。
典型做法是让 Python 只写一个固定名日志(如 app.log),然后用系统级 logrotate 管理滚动:
- logrotate 支持
dateext、compress、maxage、copytruncate(避免应用重启)等精细控制 - Python 不用关心滚动逻辑,
FileHandler即可,减少代码复杂度和潜在 bug - 唯一要注意的是:logrotate 的
create指令权限要和 Python 进程一致,否则新文件可能因权限不足写不进去
滚动机制本身不难,难的是滚动时机是否可靠、历史文件是否可控、出错时能否快速定位 —— 这些恰恰是纯 Python 方案最容易模糊处理的地方。
如非特殊说明,本站内容均来自于网友自主分享,如有任何问题均请联系我们进行处理!
猜您喜欢
遗忘之海配置要求一览
2026-07-11《遗忘之海》是由网易游戏旗下Joker工作室研发的海洋奇遇开放世界RPG游戏。就在最近游戏也终于要上线,那么有不少小伙伴好奇遗忘之海需要什么配置,下面就来告诉大家。 遗忘之海配置要求一览 一、PC配置详情-台式机 最低配置 1、CPU:i7-7700k/Ryzen51600 2、显卡:GTX1060(6G)/RX480(8G) 3、内存:16GB 4、硬盘:推荐使用固态硬盘安装游戏,并预留100G...
失控进化配置要求
2026-07-11失控进化在7月9日已经正式的上线了,今天给大家带来了这款游戏的一个配置要求,还有小伙伴不清楚什么配置可以去游玩,那么下面就是相关的内容. 失控进化配置要求 各平台配置如下: 本文内容来源于互联网,如有侵权请联系删除。
《绍宋:还我河山》游戏配置要求介绍
2026-07-09这是一款沉浸式真人互动历史权谋影视游戏!你将化身赵玖,魂穿南宋最具争议的皇帝赵构,每次抉择都将左右王朝气运、定夺天下兴亡!面对靖康之变后的山河破碎,你能否打破宿命再造山河?真人互动影视游戏《绍宋:还我河山》邀你于乱世绝境之中,一起喊出宋可亡,天下不可亡的怒吼!绍宋:还我河山需要什么配置最低配置:操作系统:Windows10/Windows11处理器:IntelCorei3或AMDequivalen...
《神貌之树逆卡巴拉》游戏配置要求介绍
2026-07-03本作以突如其来的灾害“世界崩落”后的东京为舞台。玩家将在流动的时间中发动技能,对敌人进行反击,是一款战术反击时间线RPG游戏。神貌之树逆卡巴拉需要什么配置最低配置:操作系统:Windows11处理器:IntelCorei5-2300/AMDRyzen31200内存:4GBRAM显卡:NVIDIAGeForceGTX750Ti/AMDRadeonR7360DirectX版本:12存储空间:需要8GB...
《超级变色龙》游戏配置要求介绍
2026-07-03把自己涂满颜色,融入背景吧!《MecchaChameleon》是一款全新感觉的捉迷藏游戏,玩家需要在自己纯白的身体上绘图以拟态成关卡中的样子。躲藏地点、姿势,以及最重要的“画功”是生存的关键。用连变色龙都自愧不如的技术欺骗追捕者的眼睛,在时限内逃出生天吧!您还可以轻松享受随机匹配或观众参与型直播。超级变色龙需要什么配置最低配置:操作系统:Windows1064-bit.处理器:IntelCorei...
《喵咪争霸》游戏配置要求介绍
2026-07-03《喵咪争霸》是一款可爱画风的即时战斗休闲卡牌游戏。能力各异、萌态万千的猫咪卡牌,每一张都可能是破局的关键。研究不同的卡组与道具搭配,突破重重关卡,成为这片大陆的最强大佬吧!喵咪争霸需要什么配置最低配置:操作系统*:Windows7SP1+(64-bit)处理器:IntelCore2DuoE8400或AMDAthlon64X26000+内存:4GBRAM显卡:IntelHDGraphics4000或...
《小闹花园》游戏配置要求介绍
2026-07-03《小闹花园》是一款在桌面挂机养花的游戏。你可以随缘地为种子浇水、施肥,随缘地收一收可爱的花朵和果实,最后爽爽地杀一杀讨厌的虫子,放心,它们不会弄脏你的桌面!小闹花园需要什么配置最低配置:操作系统:Windows10ornewer处理器:IntelCorei3orequivalent内存:4GBRAM显卡:IntegratedGPUwithOpenGL3.2/DirectX10support存储空间...
《枪 奶酪 外星人》游戏配置要求介绍
2026-07-03一款融合了基地建造与塔防的快节奏肉鸽射击游戏。你将和招募的强力打手们组成绞肉机防线,将满屏弹幕倾泻在如潮水涌来的外星怪物脸上!疯狂升级你的角色、购置稀有武器,在不同的战场直面各种奇怪外星Boss。另外,保护好你的队友们!枪奶酪外星人需要什么配置最低配置:操作系统:Windows10(64-bit)处理器:DualCore2.0GHz内存:2GBRAM显卡:ObsługaOpenGL3.3/1GBV...
《幻鸟之森》游戏配置要求介绍
2026-07-03《幻鸟之森》是一款陪伴你工作、学习和休息的桌面放置养成游戏。你可以在屏幕一侧观察、照料并引导神秘小鸟成长,看它们从雏鸟逐渐进化为幻想中的奇妙生物。无需频繁切换窗口,也能在日常间隙收获一份轻松与陪伴~幻鸟之森需要什么配置最低配置:操作系统:Windows10处理器:Inteli3DualCore内存:4GBRAM显卡:IntelHD3000DirectX版本:11存储空间:需要500MB可用空间 本...
Fitten Code如何配置快捷键
2026-06-28在VSCode中为FittenCode配置快捷键需编辑keybindings.json,严格按JSON格式添加command为"fitten-code.editCode"的对象,并确保光标在编辑器内才能生效。 ☞☞☞AI智能聊天,问答助手,AI智能搜索,多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜ 在VSCode中为FittenCode配置快捷键,是为了绕过鼠标操作、直接用键盘触发AI功能,比...
