插件窝 干货文章 Linux日志轮转策略如何配置

Linux日志轮转策略如何配置

轮转 日志 logrotate 文件    来源:    2025-05-07

Linux日志轮转策略配置指南

日志轮转(log rotation)是Linux系统中管理日志文件的重要机制,它可以防止日志文件无限增长占用磁盘空间。在Linux中,主要通过logrotate工具来实现日志轮转。

1. logrotate基本配置

logrotate的配置文件通常位于: - 主配置文件:/etc/logrotate.conf - 特定服务配置:/etc/logrotate.d/目录下的各个文件

基本配置示例

/var/log/myapp.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 0640 root adm
    sharedscripts
    postrotate
        /usr/bin/systemctl reload myapp.service > /dev/null
    endscript
}

2. 常用配置指令

指令 说明
daily/weekly/monthly 轮转周期
rotate N 保留N个旧日志文件
size 10M 日志达到指定大小时轮转
compress 使用gzip压缩旧日志
delaycompress 延迟压缩(下一次轮转时压缩)
missingok 日志不存在时不报错
notifempty 空日志不轮转
create MODE OWNER GROUP 轮转后创建新日志文件的权限
sharedscripts 所有日志轮转后再执行脚本
postrotate/endscript 轮转后执行的脚本

3. 配置方法

3.1 为系统服务配置日志轮转

  1. 在/etc/logrotate.d/目录下创建新配置文件

    sudo vi /etc/logrotate.d/nginx
    
  2. 添加配置内容,例如:

    /var/log/nginx/*.log {
       daily
       missingok
       rotate 14
       compress
       delaycompress
       notifempty
       create 0640 www-data adm
       sharedscripts
       postrotate
           if [ -f /var/run/nginx.pid ]; then
               kill -USR1 `cat /var/run/nginx.pid`
           fi
       endscript
    }
    

3.2 为自定义应用配置日志轮转

  1. 创建配置文件:

    sudo vi /etc/logrotate.d/myapp
    
  2. 添加配置内容:

    /var/log/myapp/*.log {
       size 50M
       rotate 5
       compress
       missingok
       notifempty
       copytruncate
    }
    

4. 测试和调试

测试配置

sudo logrotate -d /etc/logrotate.d/your_config

强制立即执行轮转

sudo logrotate -vf /etc/logrotate.d/your_config

5. 高级配置技巧

5.1 按日期命名日志文件

/var/log/app.log {
    daily
    dateext
    dateformat -%Y%m%d
    rotate 30
    compress
}

5.2 处理持续写入的日志文件

对于持续写入的日志(如Java应用),使用copytruncate选项:

/var/log/tomcat/catalina.out {
    copytruncate
    daily
    rotate 7
    compress
    missingok
}

5.3 处理多个日志文件

/var/log/myapp/*.log /var/log/myapp/*.err {
    weekly
    rotate 4
    compress
    missingok
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/myapp.pid 2>/dev/null` 2>/dev/null || true
    endscript
}

6. 日志轮转的工作原理

  1. logrotate通常通过cron每日运行(/etc/cron.daily/logrotate)
  2. 根据配置检查日志文件大小或时间条件
  3. 满足条件时执行轮转操作:
    • 重命名当前日志文件
    • 创建新日志文件
    • 可选地压缩旧日志
    • 可选地执行自定义脚本

通过合理配置logrotate,可以有效管理系统日志,防止磁盘空间被日志文件占满,同时保留足够的历史日志用于故障排查。