阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Logrotate实现Catalina.out日志按小时切割

266次阅读
没有评论

共计 4097 个字符,预计需要花费 11 分钟才能阅读完成。

一.Logrotate 工具介绍

Logrotate 是一个日志文件管理工具,它是 Linux 默认自带的一个日志切割工具。用来把旧文件轮转、压缩、删除,并且创建新的日志文件。我们可以根据日志文件的大小、天数等来转储,便于对日志文件管理,一般都是通过 cron 计划任务来完成的,让日志切割实现按小时分割,按天分割等。

二.Logrotate 运行机制

系统会定时运行 logrotate,一般是每天一次。系统是这么实现按天执行的。crontab 会每天定时执行 /etc/cron.daily 目录下的脚本,而这个目录下有个文件叫 logrotate。

[root@test01 ~]# cat /etc/cron.daily/logrotate

#!/bin/sh

/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf

EXITVALUE=$?

if [$EXITVALUE != 0]; then

    /usr/bin/logger -t logrotate “ALERT exited abnormally with [$EXITVALUE]”

fi

exit 0

实际运行时,Logrotate 会调用配置文件 /etc/logrotate.conf

三.Logrotate 的组成

/usr/sbin/logrotate        #程序所在位置;

/etc/cron.daily/logrotate    #默认让 Cron 每天执行 logrotate 一次;

/etc/logrotate.conf        #全局配置文件;

/etc/logrotate.d/          #应用自个的配置文件存放目录,覆盖全局配置;

注意:logrotate.d 是一个目录,该目录里的所有文件都会被主动的读入 /etc/logrotate.conf 中执行。另外,如果 /etc/logrotate.d/ 里面的文件中没有设定一些细节,则会以 /etc/logrotate.conf 这个文件的设定来作为默认值。

四.Logrotate 的命令格式

logrotate [OPTION…] <configfile>
-d, –debug:debug 模式,测试配置文件是否有错误。
-f, –force:强制转储文件。
-m, –mail=command:压缩日志后,发送日志到指定邮箱。
-s, –state=statefile:使用指定的状态文件。
-v, –verbose:显示转储过程。

例如:想强行切割日志文件,不等 logrotate 切割。

[root@test01 ~]# /usr/sbin/logrotate -vf /etc/logrotate.d/tomcat  #我是用来测试用的嘿嘿

注意:CentOS7 命令是在 /usr/sbin/ 里。

五. 常用配置参数说明

Logrotate 功能的实现,最重要的就是它的配置参数

下面介绍下它常用的配置参数:

compress

启用压缩,指的是轮替后的旧日志,这里默认用的是 gzip 压缩的

daily

每天轮替

dateext

使用当期日期作为命名格式

dateformat .%s

 配合 dateext 使用,紧跟在下一行出现,定义文件切割后的文件名,必须配合 dateext 使用,只支持 %Y %m %d %s 这四个参数

ifempty

即使日志文件是空的也轮替

mail

将轮替后的文件发送到指定 E -mail 地址

copytruncate

用于还在打开中的日志文件,把当前日志备份并截断,是先拷贝再清空的方式,拷贝和清空之间有一个时间差,可能会丢失部分日志数据。

monthly

一个月轮替一次

nocompress

如果在 logrotate.conf 中启用了压缩,这里是做不用压缩的参数

nomail

不发送邮件到任何地址

notifempty

如果日志是空的就不轮替(也就是空日志不切割)

olddir + 目录

轮替后日志文件放入指定的目录,必须和当前日志文件在同一个文件系统

rotate + 次数

轮替最多保留之前的数据几次,超出的将被删除或邮件接收,设为 0 则不保存

size size

当日志增长到指定大小的时候开始轮替

weekly

如果当前的星期几比上次轮替的星期几少,或者过了一个多星期,就会发生轮替通常是在每周的第一天轮替,如果 logrotate 不是每天运行的,会在第一次有机会时进行轮替

yearly

如果当前年份不同于上次轮替的年份,则进行日志轮替

Missingok

如果日志丢失,不报错继续滚动下一个日志

六. 安装配置 Logrotate

#yum 安装下

 [root@test01 ~]# yum -y install logrotate

# 机器已经装好 tomcat,下面配置切割 tomcat 日志的配置文件

[root@test01 ~]# vim /etc/logrotate.d/tomcat

 

注意:logrotate 的配置文件是 /etc/logrotate.conf,通常不需要对它进行修改。

日志文件的切割轮循设置在独立的配置文件中,它们是放在 /etc/logrotate.d/ 目录下的。

 

 

[root@test01 ~]# mkdir -p /var/log/tomcat/oldlog

[root@test01 ~]# cat /etc/logrotate.d/tomcat

/usr/local/tomcat8/logs/catalina.out {#要切割的日志路径,如果是多个就用空格分隔

    notifempty    #如果日志是空的就不轮替(也就是空日志不切割)

    rotate 5000    #轮替最多保留之前的数据 5000 次

    missingok      #如果日志丢失,不报错继续滚动下一个日志

    compress      #启用压缩,指的是轮替后的旧日志,这里默认用的是 gzip 压缩的

    dateext        #使用当期日期作为命名格式

    dateformat .%Y%m%d-%H 点    #配合 dateext 使用,紧跟在下一行出现,定义文件切割后的文件名,必须配合 dateext 使用,只支持 %Y %m %d %s

    olddir /var/log/tomcat/oldlog  #轮替后日志文件放入指定的目录 

}

注意: 我这个配置里没有设置多久切割一次,但是它也是一天切割一次,因为当 /etc/logrotate.d/tomcat 这个文件没有配置时,默认是每天定时执行 /etc/cron.daily/logrotate 这个文件,这个文件是一天一次的。

# 强制执行切割,查看 /var/log/tomcat/oldlog 下是否有日志

[root@test01 ~]# /usr/sbin/logrotate -vf /etc/logrotate.d/tomcat

reading config file /etc/logrotate.d/tomcat

olddir is now /var/log/tomcat/oldlog

Allocating hash table for state file, size 15360 B

Handling 1 logs

rotating pattern: /usr/local/tomcat8/logs/catalina.out  forced from command line (5000 rotations)

olddir is /var/log/tomcat/oldlog, empty log files are not rotated, old logs are removed

considering log /usr/local/tomcat8/logs/catalina.out

  log needs rotating

rotating log /usr/local/tomcat8/logs/catalina.out, log->rotateCount is 5000

Converted ‘ .%Y%m%d-%H 点 ’ -> ‘.%Y%m%d-%H 点 ’

dateext suffix ‘.20181226-15 点 ’

glob pattern ‘.[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9] 点 ’

glob finding old rotated logs failed

fscreate context set to unconfined_u:object_r:usr_t:s0

renaming /usr/local/tomcat8/logs/catalina.out to /var/log/tomcat/oldlog/catalina.out.20181226-15 点

compressing log with: /bin/gzip

set default create context to unconfined_u:object_r:usr_t:s0

set default create context

# 查看切割结果

Logrotate 实现 Catalina.out 日志按小时切割

# 把之前切割的删除了,因为再定时切割文件是相同的,还是 catalina.out.20181226-15 点.gz 这个文件,所以不会切割成功。

[root@test01 ~]# rm -rf /var/log/tomcat/oldlog/catalina.out.20181226-15 点.gz
[root@test01 ~]# ls /var/log/tomcat/oldlog/
[root@test01 ~]#

# 设置定时任务,每一分钟切割一次(注意:日志里要有内容,因为前面定义空的日志文件是不切割的)

[root@test01 ~]# crontab –e
*/1 * * * * /usr/sbin/logrotate -vf /etc/logrotate.d/tomcat >>/var/log/tomcat/oldlog/cutting.log

# 每俩小时切割一次

[root@test02 ~]# crontab -l
0 */2 * * * /usr/sbin/logrotate -vf /etc/logrotate.d/tomcat >> /root/chenjiaxin/cutting.log

# 查看定时切割的结果

Logrotate 实现 Catalina.out 日志按小时切割

当然,上面设置一分钟切割一次,是为了实验能尽快看到效果。实际是需要根据公司需要来设置多久来切割一次日志的!

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4097字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中