Debian主机rsyslog日志轮转出现嵌套后缀问题求助
解决Debian中rsyslog日志轮转嵌套后缀问题
问题现象
/var/log/rsyslog/目录下的日志文件出现多层嵌套日期后缀,命名混乱,示例如下:
log_server.x.log_2023-01-31.gz_2023-02-02.gz_2023-02-04.gz_2023-02-08.gz_2023-02-10.gz_2023-02-12.gz_2023-02-14.gz_2023-02-16.gz_2023-02-18.gz_2023-02-20_2023-02-22_2023-02-22 log_server.x.log_2023-02-01.gz_2023-02-03.gz_2023-02-05.gz_2023-02-07.gz_2023-02-09.gz_2023-02-11.gz_2023-02-13.gz_2023-02-15.gz_2023-02-17.gz_2023-02-19.gz_2023-02-21_2023-02-22_2023-02-22
当前logrotate配置
/var/log/rsyslog/* { rotate 30 daily dateext dateformat -%Y%m%d create 0644 root root compress delaycompress postrotate /usr/bin/killall -HUP rsyslogd endscript }
问题根源
配置里用/var/log/rsyslog/*作为匹配规则,会把**已经轮转完成的压缩日志(比如.gz文件)**也纳入处理范围。logrotate每次运行时,会误将这些已归档的文件当作活跃日志再次轮转,重复添加日期后缀和压缩操作,最终形成嵌套后缀。
解决步骤
- 修正logrotate匹配规则
只匹配rsyslog正在写入的原始日志文件(比如以.log结尾的文件),避免误处理已归档的压缩文件。修改后的配置如下:
/var/log/rsyslog/*.log { rotate 30 daily dateext dateformat -%Y%m%d create 0644 root root compress delaycompress postrotate /usr/bin/killall -HUP rsyslogd endscript }
如果你的原始日志不是.log后缀,替换成对应后缀或精确文件名即可,核心是只匹配活跃日志。
- 清理现有混乱日志
手动删除那些带有多层嵌套后缀的无效日志,示例命令:
cd /var/log/rsyslog/ && rm -f log_server.x.log_*_2023-*
根据实际文件名调整匹配规则,确保只删除混乱的日志文件。
- 验证配置有效性
先执行测试命令,检查配置是否有语法错误:
logrotate -d /etc/logrotate.d/rsyslog # 替换为你的配置文件实际路径
确认无报错后,手动触发一次轮转,验证新日志的命名是否正常:
logrotate -f /etc/logrotate.d/rsyslog
内容的提问来源于stack exchange,提问作者beard black
相关产品推荐
相关产品推荐

