<strike id="j6ksu"></strike>
<th id="j6ksu"></th>
  1. <th id="j6ksu"></th>

    如何实现tomcat日志自动定时清理

    Java Web 潘老师 4周前 (10-26) 89 ℃ (0) 扫码查看

    tomcat中的项目一般都会配置日志打印,方便调试与bug追踪定位,但是如果项目日志不定期清理,可能会导致日志文件越来越大,最后甚至撑爆硬盘,因此实现tomcat日志自动清理还是很有必要的,实现方案也很多,有些方案就不细说了,可以提供些思路,根据自己的需求可以自行选择使用。

    一、配置滚动日志实现

    一般日志都是使用log4j或log4j2来实现,现在很多基本都在逐步过渡到1og4j2,springboot默认集成logback,但性能都不及log4j2,有兴趣的可以看下这篇文章:

    SpringBoot如何整合Log4j2实现日志记录

    在java项目开发中,日志记录是必不可少的,详细且具体的日志记录对于日后的bug漏洞追踪及维护具有事半功倍的效 […]


    针对log4j,我们一般常用的日志配置是DailyRollingFileAppenderRollingFileAppenderDailyRollingFileAppender可以对日志按日期指定monthly(每月)、 weekly(每周)、daily(每天)、half-daily(每半天)、hourly(每小时)和minutely(每分钟)六个频度来存储,便于查找,但缺点就是不能自动清理,随着时间的推移越积累越多。
    RollingFileAppender可以配置MaxFileSizeMaxBackupIndex这两个属性来实现自动清理的目的,比如配置如下:

    log4j.appender.R=org.apache.log4j.RollingFileAppender  
    log4j.appender.R.Threshold=DEBUG  
    log4j.appender.R.File=test.log  
    log4j.appender.R.layout=org.apache.log4j.PatternLayout  
    log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%5p] - %c -%F(%L) -%m%n
    log4j.appender.R.MaxFileSize=20MB
    log4j.appender.R.MaxBackupIndex=10
    

    RollingFileAppender使用MaxFileSize设置一个日志文件的最大大小,当产生多个日志时,会在日志名称后面加上”.1″、”.2″、……这样的后缀,我们可以看到RollingFileAppender有个属性MaxBackupIndex,这个属性通过限制日志文件名后缀”.n”中的n大小来限制日志数量,比如上面MaxBackupIndex=10,其实最大日志数量为11。这样就实现了日志滚动覆盖,不会导致无限占用空间,存在空间上限。

    <param name="MaxFileSize" value="1024000" /> 
    

    二、shell脚本实现

    如果偏要使用DailyRollingFileAppender实现日志定时清理,有两种方案,第一种就是在程序中写个定时任务去定时删除过期的日志文件,这个代码量有点多就不贴出来了,另外一种是使用Liunx系统中的shell脚本定时去实现删除指定目录的过期日志文件。
    比如可以新建一个名为auto-clean-10day-ago-log.sh脚本,注意脚本要设置为unix格式,内容如下:

    #! /bin/bash
    #你的tomcat目录路径
    tomcat_url=/home/server/tomcat/apache-tomcat-8.5.71
    #递归删除logs目录下以.log结尾的10天之前的所有日志文件
    find ${tomcat_url}/logs/ -mtime +10 -name "*.log" -exec rm -rf {} \;
    

    然后上传该脚本,并赋予执行权限,然后将其加入到crontab中定时执行

    # 赋予脚本可执行权限
    chmod +x /home/server/scripts/auto-clean-10day-ago-log.sh
    #编辑定时任务
    crontab -e
    #加上如下内容(实现每天凌晨1点执行)保存
    0 1 * * * /home/server/scripts/auto-clean-10day-log.sh
    #重启生效
    /etc/init.d/cron restart
    

    三、使用log4j2

    log4j不支持定时删除过期日志,但log4j2支持,可以通过DefaultRolloverStrategy配置实现,具体案例如下:

    <?xml version="1.0" encoding="utf-8" ?>
    <Configuration status="INFO">
        <Appenders>
            <RollingFile name="runtimeFile" fileName="./logs/active.log" filePattern="./logs/%d{yyyy-MM-dd.HH}.log" append="true">
                <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS Z}\t%level\t%class\t%line\t%thread\t%msg%n" />
                <Policies>
                    <TimeBasedTriggeringPolicy />
                </Policies>
                <!-- 此行以下为自动清理日志的配置 -->
                <DefaultRolloverStrategy>
                    <Delete basePath="./logs">
                        <!-- glob 项为需要自动清理日志的pattern -->
    
                        <IfFileName glob="*.log"/>
                        <!-- 1d 表示自动清理掉1天以前的日志文件 -->
                        <IfLastModified age="24H"/>
    
                    </Delete>
                </DefaultRolloverStrategy>
                <!-- 此行以上为自动清理日志的配置 -->
            </RollingFile>
        </Appenders>
        <Loggers>
            <Root level="INFO" additivity="false">
                <!--<AppenderRef ref="console" />-->
                <AppenderRef ref="runtimeFile" />
            </Root>
        </Loggers>
    </Configuration> 
    

    总而言之,实现tomcat日志自动定时清理有很多种方式,选择一种适合自己的最好!


    版权声明:本站所有文章,如无特殊说明,均为本站原创。全部下载资源版权归原作者所有。任何个人或组织,若未征得本站同意,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。若需转载请注明文章来源。
    本文链接:如何实现tomcat日志自动定时清理
    喜欢 (0)
    请潘老师喝杯Coffee吧!】
    分享 (0)
    用户头像
    发表我的评论
    取消评论
    表情 贴图 签到 代码

    Hi,您需要填写昵称和邮箱!

    • 昵称【必填】
    • 邮箱【必填】
    • 网址【可选】

    您也可以 微信登录 来发表评论!

    韩国毛茸茸的丰满妇女