说到系统性能优化,日志轮转绝对是个不能忽视的环节。日志文件如果不加控制,会像滚雪球一样越来越大,最终吃光磁盘空间,甚至拖慢系统响应。那么,如何给日志文件“瘦身”?常见的做法就是设置日志轮转。下面梳理几种主流方法,供你根据实际场景灵活选用。
使用 logrotate 工具(适用于 Linux 系统)
logrotate 是 Linux 下最常用的日志管理工具,能够自动压缩、删除和轮转日志文件,省去手动维护的麻烦。
安装
logrotate:大多数发行版默认已安装,如果没有,用包管理器补上即可。sudo apt-get install logrotate # Debian/Ubuntu sudo yum install logrotate # CentOS/RHEL配置
logrotate:主配置文件在/etc/logrotate.conf,你也可以在/etc/logrotate.d/下创建自定义配置。下面是一个 Nginx 日志轮转的示例:/var/log/nginx/*.log { daily missingok rotate 7 compress delaycompress notifempty create 0640 www-data adm }这段配置的含义是:每天轮转一次;日志文件丢失时不报错;保留最近 7 份轮转后的日志;对旧日志进行压缩,但延迟压缩(等到下一次轮转才压缩);如果日志为空则不轮转;轮转后创建新日志文件,权限设为
0640,属主www-data,属组adm。测试配置:手动执行一遍可以验证配置是否正确,避免上线后出问题。
sudo logrotate -f /etc/logrotate.conf
使用 rsyslog 或 syslog-ng(适用于 Linux 系统)
如果系统日志服务用的是 rsyslog 或 syslog-ng,它们本身也支持轮转功能,适合统一管理应用日志。
rsyslog
编辑配置文件,通常位于
/etc/rsyslog.conf或/etc/rsyslog.d/50-default.conf。添加轮转相关配置,比如监控一个自定义应用日志:
$ModLoad imuxsock $ModLoad imklog $ModLoad imfile input(type="imfile" File="/var/log/myapp.log" Tag="myapp" StateFile="myapp-state" Severity="info" Facility="local7") if $programname == 'myapp' then /var/log/myapp.log & stop重启
rsyslog使配置生效:sudo systemctl restart rsyslog
syslog-ng
编辑主配置文件
/etc/syslog-ng/syslog-ng.conf。添加类似如下配置:
source s_local { file("/var/log/myapp.log" program("myapp")); }; destination d_local { file("/var/log/myapp.log"); }; log { source(s_local); destination(d_local); };重启
syslog-ng:sudo systemctl restart syslog-ng
使用 cron 定时任务(适用于所有系统)
如果不想依赖专用工具,直接用 cron 定时调用 logrotate 也是一种简单粗暴的办法。毕竟很多场景下,一个定时任务就能搞定。
编辑 crontab:
crontab -e添加一条定时任务,比如每天午夜执行一次日志轮转:
0 0 * * * /usr/bin/logrotate /etc/logrotate.conf
以上几种方法都可以有效实现日志轮转,关键在于根据你的系统环境和日志量选择合适的方式。对于大多数 Linux 服务器,logrotate 已经足够好用;如果日志系统本身有更高阶的需求,rsyslog 或 syslog-ng 的轮转功能也值得一试。总之,别让日志成为系统的“隐形杀手”,尽早配置轮转,省心省力。