行业资讯 2025年08月6日
0 收藏 0 点赞 180 浏览 2718 个字
摘要 :

文章目录 一、配置滚动日志实现 二、shell脚本实现 三、使用log4j2 tomcat中的项目一般都会配置日志打印,方便调试与bug追踪定位,但是如果项目日志不定期清理,可能会……




  • 一、配置滚动日志实现
  • 二、shell脚本实现
  • 三、使用log4j2

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

一、配置滚动日志实现

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

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

文章目录 一、常用日志框架类型 二、常用日志框架与slf4j的区别 三、为什么选择Log4j2 四、Sprin […]

针对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。这样就实现了日志滚动覆盖,不会导致无限占用空间,存在空间上限。

注意:如果通过xml配置,MaxFileSize属性对应的必须是数值,而且单位是byte,比如如果设置为1M那必须写成如下:

<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日志自动定时清理有很多种方式,选择一种适合自己的最好!

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/8121.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号