后端开发常遇到的一个问题是,服务产生的日志文件过大,在使用日志文件排查问题时,
如果文件过大,会降低排查问题的效率;而且不对文件进行切割,就没法单独的压缩较久远的日志,浪费磁盘空间
下面介绍 linux 下常用的日志切割工具 logrotate 的使用。
linux 系统默认安装了 logrotate,通常由 cron 程序定时执行,执行周期是一天;
可以查看 cron 的执行日志来确认 logrotate 的执行时间:/var/log/cron;
现在说说 logrotate 执行机制;
logrotate 的配置文件会决定它的执行行为;主配置文件为 /etc/logrotate.conf,可以把各个应用要切割的日志单独保存为一个配置文件,并存放在 /etc/logrotate.d/ 目录下,通过在主配置文件增加下面一行内容来引入各个应用的独立配置文件;
include /etc/logrotate.d
下图是 logrotate.conf:
假设现在要切割某个 nginx 服务的访问日志,创建 /etc/logrotate.d/www.nginx.conf,内容如下:
/www/nginx/logs/access.log {
su root root
daily
copytruncate
size +500M
dateext
compress
olddir /www/nginx/logs
notifempty
}
然后保存即可,第二天以后就会定时执行这份配置的日志切割了。
那万一配置有问题,总不能等一天出错了才能发现吧,因此还需要提前检查配置文件的正确性,其实就是将自动执行改为手动执行即可,如果这次不想立即切割,加上 -d 选项即可:
sudo logrotate -d /etc/logrotate.d/www.nginx.conf