Logrotate实现Catalina.out日志每俩小时切割示例

一.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

#查看切割结果

#把之前切割的删除了,因为再定时切割文件是相同的,还是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

#查看定时切割的结果

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Linux中logrotate日志轮询操作总结

    前言 对于Linux系统安全来说,日志文件是极其重要的工具.不知为何,我发现很多运维同学的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本,大家似乎遗忘了Logrotate,争相发明自己的轮子,这真是让人沮丧啊!就好比明明身边躺着现成的性感美女,大家却忙着自娱自乐,罪过!logrotate程序是一个日志文件管理工具.用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到"转储"作用.可以节省磁盘空间. 下面就对logrotate日志轮转操作做一梳理记录: 1)配置

  • Linux使用logrotate来切割日志文件

    程序在运行的时候为了了解运行状态,会输出日志文件,时间久了日志文件会变得非常大,甚至达到GB级别.我在golang应用里使用logrus包来打日志,配置和使用都很方便,就是没有日志分割的功能,应用在线上运行一个月后日志文件都已经达到上百兆.后来发现了logrotate,这是centos自带的日志分割工具,都不用安装额外组件就能实现定时分割日志. 1.运行原理 logrotate由系统的cron运行,位置在/etc/cron.daily/logrotate #!/bin/sh /usr/sbin/

  • Tomcat 日志切割(logrotate)详细介绍

    Tomcat 日志切割 logrotate是个强大的系统软件,它对日志文件有着一套完整的操作模式,譬如:转储.邮件和压缩等,并且默认logrotate加到cron(/etc/cron.daily/logrotate)作为每日任务执行.自动有了logrotate,我想不用再自己写日志切割脚本. 如下对Tomcat日志catalina.out日志切割 # ls -lh /usr/local/tomcat/logs/catalina.out -rw-r--r-- 1 www www 14M Aug 2

  • Logrotate实现Catalina.out日志每俩小时切割示例

    一.Logrotate工具介绍 Logrotate是一个日志文件管理工具,它是Linux默认自带的一个日志切割工具.用来把旧文件轮转.压缩.删除,并且创建新的日志文件.我们可以根据日志文件的大小.天数等来转储,便于对日志文件管理,一般都是通过cron计划任务来完成的,让日志切割实现按小时分割,按天分割等. 二.Logrotate运行机制 系统会定时运行logrotate,一般是每天一次.系统是这么实现按天执行的.crontab会每天定时执行/etc/cron.daily目录下的脚本,而这个目录下

  • Linux tomcat下catalina.out日志文件分割

    Linux tomcat下catalina.out日志文件分割 前言: tomcat默认使用Java.util.logging记录日志,默认只记录tomcat的日志,不记录应用的日志.tomcat支持采用log4j进行日志记录,配置方法如下: 1.更新最新的tomcat_juli.jar包到./bin/目录下: 2.拷贝log4j.jar,lo4j.properties到./lib目录下; 3.删除./conf/logging.properties 4.重启 log4j配置样本 实例代码: lo

  • Tomcat8使用cronolog来进行Catalina.Out日志分割方法

    背景 tomcat产生的catalina.out日志文件如果不进行分割处理的话,往往会导致文件越来越大,影响效率.同时如需查找日志文件的时候,在那么大的catalina.out日志文件中查找也比较费事,最好是按天来分割catalina.out日志文件.下面来介绍一种分割方法:使用cronolog来分割catalina.out日志文件 方法 安装cronolog-1.6.2.tar.gz 下载地址: cronolog-1.6.2.tar.gz tar -zxvf cronolog-1.6.2.ta

  • tomcat的catalina.out日志按自定义时间格式进行分割的操作方法

    默认情况下,tomcat的catalina.out日志文件是没有像其它日志一样,按日期进行分割,而是全部输出全部写入到一个catalina.out,这样日积月累就会造成.out日志越来越大,给管理造成了不便,为了实现像其它日志文件一样按日期归档,这里我采用cronolog来完成日志分割. 一.安装Cronolog 1.yum方式安装 # yum install cronolog 2.下载压缩包安装 1. 下载(最新版本) wget http://cronolog.org/download/cro

  • Go常用技能日志log包创建使用示例

    目录 ️ 实战场景 log 包 - 使用 Logger Logger 配置 使用 New 创建 logger ️ 实战场景 在日常开发中,用到做最多的知识点除了字符串操作外,就数日志模块最常用了,毕竟有日志调试和修改 BUG 才方便,而且如果你是编程知识的初学者,更是建议先学习一下日志相关知识. log 包 - 使用 Logger 在 Go 中,内置了 log 包实现简单日志的记录功能,如果你有 Python 中 logger 模块的使用经验,学习起来也是非常简单的. log 包中定义了一个 L

  • 详解关于tomcat切割catalina.out日志的三种方式

    1.log4j进行日志切分 1)准备三个包:log4j-1.2.17.jar      tomcat-juli.jar      tomcat-juli-adapters.jar 放到tomcat的lib目录或者是工程的WEB_INF/lib下, 2)在lib目录下新建log4j.properties,加入以下内容 log4j.rootLogger = INFO, CATALINA # Define all the appenders log4j.appender.CATALINA = org.

  • Tomcat使用Log4j输出catalina.out日志

    Tomcat默认的日志是用java.util.logging,有几点不足,文件catalian.out不能像log4j一样按天生成,将越来越大.日志格式和项目中用log4j打出来的不一致,不利于解析. 从tomcat官网(https://tomcat.apache.org/tomcat-7.0-doc/logging.html)上找了下,修改一些配置.替换扩展包即可使用log4j输出catalian.out. 在$CATALINA_BASE/lib下创建log4j.properties文件 lo

  • log4net教程日志分类和自动维护示例

    如果我们需要通过配置不同的ILog,流程是这样的,首先要创建一个ILoggerRepository,通过它来进行日志等级的配置,和各种Appender,接着通过LogManager在ILoggerRepository获取一个Ilog对象,就可以写日志了.代码如下: 复制代码 代码如下: public static ILog GetLogger(string repositoryName = "")        {            if (string.IsNullOrEmpty

  • SqlServer中tempdb的日志机制原理解析及示例分享

    测试用例 我们分别在用户数据库(testpage),tempdb中创建相似对象t1,#t1,并在tempdb中创建创建非临时表,然后执行相应的insert脚本(用以产生日志),并记录执行时间用以比较用以比较说明tempdb"快" Code 用户数据库testpage use testpage go create table t1 ( id int identity(1,1) not null, str1 char(8000) ) declare @t datetime2=sysutcd

  • Python3.6日志Logging模块简单用法示例

    本文实例讲述了Python3.6日志Logging模块简单用法.分享给大家供大家参考,具体如下: Logging是一个很方便的模块,用来打印日志 我直接列出一个最灵活的方法 # -*- coding:utf-8 -*- #!python3 import logging logger = logging.getLogger() # logging对象 fh = logging.FileHandler("test.log") # 文件对象 sh = logging.StreamHandle

随机推荐