在 Linux 下,**日志切割(Log Rotation)**最常见的做法是使用系统自带的 logrotate 工具。下面从「原理 → 配置方式 → 示例 → 常用参数 → 验证」一步步说明。
logrotate 是 Linux 自带日志管理工具cron 或 systemd timer 执行配置文件位置:
/etc/logrotate.conf # 主配置
/etc/logrotate.d/ # 各服务配置目录
例如你的日志在:
/var/log/myapp/app.log
新建配置文件:
vim /etc/logrotate.d/myapp
内容示例:
/var/log/myapp/app.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
| 参数 | 作用 |
|---|---|
| daily | 每天切割 |
| weekly | 每周 |
| monthly | 每月 |
| rotate 7 | 保留 7 份 |
| compress | 压缩旧日志 |
| missingok | 日志不存在不报错 |
| notifempty | 空日志不切割 |
| copytruncate | 复制后清空原文件(不重启服务) |
/var/log/nginx/*.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 0640 nginx nginx
sharedscripts
postrotate
systemctl reload nginx > /dev/null 2>&1
endscript
}
/opt/app/logs/*.log {
size 100M
rotate 5
compress
copytruncate
missingok
notifempty
}
copytruncate适合不支持信号重开的程序
logrotate -d /etc/logrotate.d/myapp
logrotate -f /etc/logrotate.d/myapp
/etc/cron.daily/logrotate
systemctl status logrotate.timer
如果你是:
可以用:
logrotate + copytruncatelogging driver❓ 日志没切割?
❓ 切割后服务写不进日志?
copytruncate 或 postrotate reload如果你愿意,可以告诉我:
我可以给你一份 可直接用的配置。