判断日志是否按天切割需交叉验证配置、时间戳和轮转记录:logrotate 配置须含 daily 和 dateext;归档文件修改时间应集中于每日凌晨;状态文件与 cron 日志须显示连续每日执行。

判断日志目录是否按天切割,关键不是看“有没有日期后缀”,而是验证切割行为是否真正按天触发并完成。单纯检查文件名容易误判(比如手动重命名、脚本写错格式),应从配置、时间戳、轮转记录三方面交叉确认。
看 logrotate 配置是否启用 daily 和 dateext
这是最直接的依据。检查对应服务的配置文件(如 /etc/logrotate.d/nginx)中是否包含:
- daily:表示按天轮转(不是默认值,必须显式声明)
- dateext:启用日期后缀(如 access.log-20260915),否则用数字序号(access.log.1)
- rotate N 和 compress 可辅助判断是否为规范的日志管理策略
查日志文件时间戳是否符合每日生成规律
进入日志目录(如 /var/log/nginx/),运行:
ls -lt *.log*
观察输出结果:
- 主日志文件(如 access.log)修改时间应在今天范围内,且大小持续增长
- 归档文件(如 access.log-20260915、access.log-20260914)的修改时间应分别落在对应日期的凌晨附近(通常在 3:00–5:00 区间,取决于 anacron 设置)
- 若出现 access.log.1、access.log.2 这类数字后缀,说明未启用 dateext,即使按天切,也不算“按天命名切割”
核对 logrotate 状态文件和执行历史
logrotate 自带状态追踪机制,可确认它是否真正在每天执行过切割:
- 查看状态文件:cat /var/lib/logrotate/logrotate.status,搜索你的日志路径,看最后轮转日期是否为昨天或更早的连续日期
- 检查 cron 执行日志:grep logrotate /var/log/cron | tail -10,确认最近几天是否有成功调用记录
- 手动模拟一次:logrotate -d /etc/logrotate.d/nginx 查看调试输出,确认匹配到日志路径、识别出 daily 规则、计划执行 postrotate
排除常见假象
以下情况看似“按天”,实则不符合标准按天切割逻辑:
- 文件名含日期但由应用自身写入(如 Java 应用用 logback 自动切),与 logrotate 无关
- 用 find + gzip 脚本定时压缩旧文件,但没重命名或移走原日志,Nginx 仍在往同一个文件写
- 配置了 daily 却漏掉 create 或 sharedscripts,导致切割后服务没重载,新日志仍追加到旧文件


















