zoukankan      html  css  js  c++  java
  • 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

    #查看定时切割的结果

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

  • 相关阅读:
    数据结构 AVL树
    数据结构 快速排序
    Mybatis 传递多个参数
    数据结构 二叉搜索树
    Java 多线程 ReadWriteLock
    Java 基础 集合框架
    SourceTree安装跳过注册
    【前端部署】阿里云 windows2019服务器用node部署静态项目
    【node开发】node简易服务器一分钟搞定
    【node开发】node.js编写一个接口
  • 原文地址:https://www.cnblogs.com/chenzhazha/p/10185212.html
Copyright © 2011-2022 走看看