在 Linux 中,**syslog 分割(日志轮转)**通常是通过 logrotate 来完成的,而不是直接由 syslog 服务本身处理。下面分几种常见情况说明。
大多数发行版已经默认配置好:
ls /etc/logrotate.d/
常见文件:
rsyslogsyslogmessages/var/log/syslog
/var/log/messages
/var/log/auth.log
{
daily
rotate 7
missingok
notifempty
compress
delaycompress
postrotate
/usr/lib/rsyslog/rsyslog-rotate 2>/dev/null || true
endscript
}
含义说明:
| 参数 | 说明 |
|---|---|
daily |
每天轮转 |
rotate 7 |
保留 7 个历史文件 |
compress |
压缩旧日志 |
delaycompress |
延迟一次压缩 |
missingok |
日志不存在也不报错 |
notifempty |
空文件不轮转 |
postrotate |
轮转后执行命令(如重载 rsyslog) |
logrotate -vf /etc/logrotate.conf
或单独测试某个配置:
logrotate -vf /etc/logrotate.d/rsyslog
轮转后通常需要让 rsyslog 重新打开文件:
systemctl restart rsyslog
或在 postrotate 中使用:
kill -HUP $(cat /var/run/rsyslogd.pid)
systemctl restart syslog-ng
/var/log/syslog {
size 10M
rotate 5
compress
}
logrotate 默认最小单位是 daily,按小时需要:
rsyslog 本身也可以按时间生成文件:
$template DailyLogs,"/var/log/syslog-%$NOW%.log"
*.* ?DailyLogs
⚠️ 这种方式 不会自动清理旧日志,仍需 logrotate 配合。
/var/lib/logrotate/status/var/log/logrotate.logpostrotate reload✅ 最佳实践
logrotate 做轮转rsyslog / syslog-ng 只负责写日志如果你愿意,可以告诉我:
rsyslog 还是 syslog-ng我可以给你一份完全可直接用的配置。