1. 编写配置文件,内容如下(以 Amadeus 系统为例):
编写配置文件,放在 /etc/logrotate.d/xxxx 下,其中 xxxx 是自己取的名字,无需后缀。例如 Amadeus 系统中此文件是 /etc/logrotate.d/amadeus
/usr/local/tomcat_amadeus/logs/catalina.out { copytruncate daily dateext rotate 15 compress missingok size 2000M }
第一行是文件的全路径,大括号中的重要字段解释如下:
copytruncate 使用先拷贝文件再 truncate 原文件的方法来轮转,这种方法无需停应用,也不会有数据丢失。
daily 按天执行
dateext 轮转后的日志备份加上日期后缀
rotate 15 总共保留 15 份备份文件
compress 开启gzip压缩,能大幅减少日志备份的尺寸
missingok 日志文件不存在的时候不会报错(如果有多个配置,会继续执行)
size 2000M 只有文件大于 2000M 时才轮转
配置项的详细解释可以参考 man logrotate。
2. 设置 crontab 任务
logrotate 程序默认是作为系统全局的 daily 任务执行的,按理来说只需要编写好了配置文件就会自动执行。但我发现这样会有不工作的情况,因此显示地多配置了一个 crontab 任务来执行它,如下:
00 00 * * * /usr/sbin/logrotate -v /etc/logrotate.d/amadeus >> /home/jerry/logrotate.log 2>&1
将参数部分的配置文件路径替换成你自己的配置文件即可。要注意的是必须确保运行 crontab 的用户对日志文件及所在的目录有读写权限。建议直接使用运行 Tomcat 时的用户。
添加 crontab 的方法是使用对应的用户登录系统,执行 crontab -e,按上面的方式添加一行即可。
3. 查看,搜索日志备份
启用 logrotate 后的效果:
[[email protected] logs]$ ls -lh catalina.out* -rw-r--r--. 1 jerry xxxxxxxx 2.2G Jan 14 14:52 catalina.out -rw-r--r--. 1 jerry xxxxxxxx 93M Dec 30 00:00 catalina.out-20131230.gz -rw-r--r--. 1 jerry xxxxxxxx 83M Dec 31 00:00 catalina.out-20131231.gz -rw-r--r--. 1 jerry xxxxxxxx 110M Jan 1 00:00 catalina.out-20140101.gz -rw-r--r--. 1 jerry xxxxxxxx 165M Jan 3 00:01 catalina.out-20140103.gz -rw-r--r--. 1 jerry xxxxxxxx 111M Jan 4 00:01 catalina.out-20140104.gz -rw-r--r--. 1 jerry xxxxxxxx 110M Jan 5 00:00 catalina.out-20140105.gz -rw-r--r--. 1 jerry xxxxxxxx 106M Jan 6 00:00 catalina.out-20140106.gz -rw-r--r--. 1 jerry xxxxxxxx 167M Jan 7 00:01 catalina.out-20140107.gz -rw-r--r--. 1 jerry xxxxxxxx 208M Jan 8 00:01 catalina.out-20140108.gz -rw-r--r--. 1 jerry xxxxxxxx 170M Jan 9 00:01 catalina.out-20140109.gz -rw-r--r--. 1 jerry xxxxxxxx 194M Jan 10 00:01 catalina.out-20140110.gz -rw-r--r--. 1 jerry xxxxxxxx 172M Jan 11 00:01 catalina.out-20140111.gz -rw-r--r--. 1 jerry xxxxxxxx 119M Jan 12 00:00 catalina.out-20140112.gz -rw-r--r--. 1 jerry xxxxxxxx 145M Jan 13 00:01 catalina.out-20140113.gz -rw-r--r--. 1 jerry xxxxxxxx 181M Jan 14 00:01 catalina.out-20140114.gz
可以看到,启用了压缩后,每天几个G的日志占用的空间减少到只有100多M。
按这个配置,备份的日志文件都是被压缩过的,会带有 gz 扩展名。当需要查询、查看这些文件的时候,可以使用以下方法:
1. 查看:使用 zless
2. 查找字符串:使用 zgrep
3. 显示内容:使用 zcat
4. 还原文件:gunzip xxxx.gz
一般情况不建议用 gunzip 解压开,而是直接使用 zless,zcat 等工具。例如要从旧日志里 grep 一个关键字并做处理,可以这么做:
zgrep Exception catalina.out-20131230.gz
或者
zcat catalina.out-20131230.gz | grep Exception