调试时应使用nocompress禁用压缩,确保logrotate生成的旧日志为未压缩纯文本,便于grep、less等工具直接查看;同时配合notifempty和missingok避免空文件或路径缺失导致轮转异常。

调试阶段禁用压缩,核心是让 logrotate 生成的旧日志文件保持未压缩的纯文本格式,方便快速查看、grep 搜索或用 less 实时阅读。nocompress 就是专门用来关闭 gzip 压缩行为的参数,它比 delaycompress 更直接——后者仍会压缩(只是推迟一轮),而 nocompress 是彻底不压。
明确禁用压缩:用 nocompress 替代 compress
默认全局配置(/etc/logrotate.conf)里常启用 compress,这会导致所有子配置继承压缩行为。调试时必须显式覆盖:
- 在服务专属配置中(如 /etc/logrotate.d/myapp),删掉 compress 或 delaycompress 行
- 加上 nocompress,确保该段规则完全跳过压缩步骤
- 注意:nocompress 和 compress/delaycompress 互斥,同时出现时 nocompress 优先生效
配合 notifempty 和 missingok 避免误触发
调试期间日志可能写入不稳定,空文件或临时缺失很常见。若不加控制,logrotate 可能因空日志报错或跳过轮转,影响观察节奏:
- notifempty:只对非空日志执行轮转,避免生成一堆无意义的空归档
- missingok:即使日志路径暂时不存在(比如服务刚启停),也不中断整个 logrotate 执行流程
- 两者共用,能让调试过程更“静默”和可靠
验证是否生效:检查归档文件后缀和大小
启用 nocompress 后,轮转出的旧日志文件应满足两个特征:
- 文件名不含
.gz后缀(例如app.log.1、app.log.2,而非app.log.1.gz) - 文件大小与原始日志接近(未被 gzip 压缩缩小),可用
ls -lh直观对比 - 手动
head -20 /var/log/myapp/app.log.1应能立即看到明文内容,无需先zcat
临时调试推荐组合写法
一个面向调试的简洁配置示例(/etc/logrotate.d/myapp-debug):
/var/log/myapp/app.log {
daily
rotate 7
nocompress
notifempty
missingok
create 0644 myapp myapp
copytruncate
}
其中 copytruncate 确保应用不重启也能安全截断日志,适合调试中频繁启停的场景;create 保证新日志权限正确,避免因权限问题导致后续写入失败。











