Logrotate核心配置应放在/etc/logrotate.d/下为各服务建独立文件,而非修改主配置;触发方式支持daily或size +100M(满足任一即轮转);关键参数需组合copytruncate、create、delaycompress等确保安全可靠。

Linux 中配置 Logrotate 实现日志轮转切割,核心是写对配置文件、选对触发方式、避开常见冲突。它不依赖服务常驻,而是由 cron 每天自动调用,你只需定义规则,系统就会按时或按大小执行切割、压缩、清理。
配置文件放在哪儿最稳妥
不要直接改 /etc/logrotate.conf,除非你想统一影响所有日志。推荐做法是在 /etc/logrotate.d/ 下为每个应用建独立文件,比如:
- /etc/logrotate.d/nginx 管 Nginx 日志
- /etc/logrotate.d/myapp 管自研程序日志
- /etc/logrotate.d/tomcat 管 Java 应用日志
这样修改互不干扰,排查和更新都更清晰。logrotate 启动时会自动读取这个目录下所有文件,等效于“include”进主配置。
按大小还是按时间触发
如果日志写入不稳定(比如突发流量导致单日暴涨),光靠 daily 或 weekly 容易让单个文件过大。这时直接加 size 参数更可靠:
- size +100M:文件超过 100MB 就立即轮转
- size 50k:精确到 KB 级别(适合调试或小日志)
- 可同时写 daily 和 size +50M,满足任一条件即触发
注意:+ 号表示“大于等于”,不加 + 是“严格大于”。生产环境建议带 +,避免临界值漏触发。
关键参数怎么组合才不出错
以轮转 /var/log/myapp/app.log 为例,一个安全可用的最小配置如下:
/var/log/myapp/app.log {
size +100M
rotate 7
compress
delaycompress
missingok
notifempty
create 0644 myapp myapp
copytruncate
}
逐项说明:
- copytruncate:先复制内容再清空原文件,避免应用因重命名而写失败(尤其适用于不支持 reopen 的程序)
- create:轮转后新建日志文件,并设好权限和属主,防止应用无权写入
- missingok + notifempty:日志不存在或为空时不报错,避免 cron 日志刷屏
- delaycompress:本次轮转不压缩,下次再压,方便快速查看最新归档
怎么验证配置是否生效
别等 cron 自动跑,上线前务必手动测试:
- 检查语法:sudo logrotate -d /etc/logrotate.d/myapp(只模拟,不改动文件)
- 强制执行一次:sudo logrotate -vf /etc/logrotate.d/myapp(-v 显示过程,-f 强制触发)
- 观察结果:/var/log/myapp/app.log 是否变小,是否生成 app.log.1 或 app.log.1.gz
如果发现没轮转,优先检查文件权限、路径是否存在、以及应用是否正在独占写入该文件。


















