Log4j2进阶使用(按大小时间备份日志)

Log4j2进阶使用(按大小时间备份日志),第1张

本文介绍Log4j2进阶使用,

基本使用请参考 Log4j2基本使用入门 。

本文基于上面的基本使用入门,

主要介绍按照日志大小和时间备份日志,

并且限制备份日志的个数,

以及删除过期的备份日志。

由于日志信息是不断追加到日志文件的,

经过一段时间会导致日志文件很大,

所以需要及时分割过大的日志文件,

以及限制日志文件占用的硬盘空间,

及时清理掉不用的过期的日志文件。

RollingFileAppender能实现上面提出的需求,

它需要配置TriggeringPolicy和RolloverStrategy,

TriggeringPolicy触发策略决定何时执行备份,

RolloverStrategy翻转策略决定如何执行备份。

如果没有配置RolloverStrategy翻转策略,

RollingFileAppender将使用DefaultRolloverStrategy,

而且DefaultRolloverStrategy支持自定义删除文件 *** 作。

LOG_HOME用于指定当前日志存放的目录,

LOG_BACKUP用于指定备份日志存放的目录,

FILE_NAME用于指定日志文件的名称。

在需要的地方使用${LOG_HOME}引用即可。

本章通过配置log4j2.xml,

实现如下目标:

最多保存3个日志备份文件,

每个日志文件大小不超过1MB。

这里增加了一个类型为RollingFile的Appender,

name为RollingSizeFile,

FileName为${LOG_HOME}/${FILE_NAME}.log,

指定了当前正在打印的日志文件名称,

和文件存放的相对路径;

filePattern为${LOG_HOME}/${LOG_BACKUP}/${FILE_NAME}-%i.log,

指定了备份后的日志文件名称和存放路径,

其中%i表示备份文件名按照正整数开始递增。

SizeBasedTriggeringPolicy策略指定了文件大小:

当日志文件达到1MB时生成备份文件,

大小以字节为单位指定,

后缀为KB、MB或GB,例如1GB。

如果不填,默认值为10MB。

AppenderRef指定打印日志到新增的name为RollingSizeFile的Appender。

运行测试程序,

打印一段时间的日志,

在项目下会生成如下目录和文件:

可以看到logs目录下有test.log文件和backup目录,

backup目录下有test-1.log等7个备份文件,

而且每个文件的大小都是1MB。

上面由于没有配置RolloverStrategy滚动策略,

RollingFileAppender使用DefaultRolloverStrategy,

DefaultRolloverStrategy默认最多保存7个备份文件。

RollingFile中增加DefaultRolloverStrategy默认滚动策略,

并且指定最多保存3个备份文件:

修改后效果如下:

本章通过配置log4j2.xml,

实现如下目标:

每1分钟备份一次日志文件,

删除3分钟前备份的日志文件。

这里的配置和第4步中略有不同,

name为RollingTimeFile,

主要是filePattern、TimeBasedTriggeringPolicy配置不一样,

filePattern为${LOG_HOME}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd-HH-mm}.log,

其中$${date:yyyy-MM}指定了备份文件存放的目录为当前年月,

比如目录2019-09,而不是backup了,

${FILE_NAME}-%d{yyyy-MM-dd-HH-mm}.log指定了备份后的日志文件名称,

精确到分钟的一个时间戳。

TimeBasedTriggeringPolicy策略指定了生成备份文件的策略。

这个配置要和filePattern结合使用,

上面filePattern中的命名规则是${FILE_NAME}-%d{yyyy-MM-ddHH-mm}.log,

最小的时间粒度是mm,即分钟,

而TimeBasedTriggeringPolicy设置的interval是1,

结合起来就是每1分钟生成一个新文件。

同理,如果要每1小时生成一个新文件,

则改成%d{yyyy-MM-ddHH},最小粒度为小时,

如果再把interval该为12,

那就是每12小时生成一个新文件。

AppenderRef指定打印日志到新增的name为RollingTimeFile的Appender。

运行测试程序,

打印一段时间的日志,

在项目下会生成如下目录和文件:

可以看到logs目录下有test.log文件和2019-09备份目录,

2019-09目录下有test-2019-09-27-17-20.log等14个备份文件,

而且每个文件的大小都不一样,与该时间段内打印的日志多少有关。

随着时间推移会生成2019-10之类的目录,

而且目录下的备份文件也会越来越多。

RollingFile中增加DefaultRolloverStrategy策略,

删除3分钟前备份的日志文件:

Delete表示删除满足条件的文件,

basePath指定了需要处理的日志目录,

因为备份的日志在basePath下的年月目录($${date:yyyy-MM}),

所以maxDepth设置为2,代表扫描的目录深度,

maxDepth="1"表示当前目录。

指定文件名称:

匹配二级目录下的扩展名为.log的文件。

指定文件过期时间:

age的单位:D、H、M、S,分别表示天、小时、分钟、秒。

匹配最后修改时间为3分钟前的文件。

修改后效果如下:

查看目录时的当前时间是2019-09-29 15:44,

可以看到只保存了3分钟内生成的3个日志,

随着时间的推移,

生成新日志test-2019-09-29-15-44.log,

删除旧日志test-2019-09-29-15-41.log,

该目录下始终只有当前时间3分钟内的备份日志。

可以把按大小和时间备份结合起来使用,

实现更复杂的日志文件备份需求。

本章通过配置log4j2.xml,

实现如下目标:

每1分钟备份一次日志文件,

每个日志文件大小不超过1MB,

如果在1分钟内日志文件超过1MB,

则生成以当前时间+序号的备份日志,

但是每分钟内最多保存3个备份日志,

并且删除5分钟前备份的日志文件。

大部分配置和上面说过的一致,

就是简单的组合起来即可,

需要注意的是filePattern:

备份文件名${FILE_NAME}-%d{yyyy-MM-dd-HH-mm}-%i.log结合了时间和序号。

运行测试程序,

打印一段时间的日志,

在项目下会生成如下目录和文件:

看到2019-09目录下只有5分钟内的备份日志,

每分钟的备份日志最多有3个文件,

根据日志具体打印的情况,

少的时候可能1分钟只有1或者2个文件,

多的时候最多也只有3个文件,

在这1分钟内后生成的日志会覆盖掉前面的。

下面给出完整的配置文件,

供大家开发时参考使用:

slf4j+log4j2基础教程(拿来即用教程)

log4j2 RollingRandomAccessFile配置

log4j2 入门教程

一、前提条件 系统必须是使用LOG4J进行日志管理,否则方法无效。 系统必须包含中国mons-logging-xxx.jar,log4j-xxx.jar这两个JAR包,XXX为版本号。 二、 *** 作步骤 1、创建日志表要把日志持久化,必须在数据库中创建一张用来存储日志信息的表,表内字段为日志 的一个主要属性包括: *** 作类,执行方法,打印时间,日志级别,日志内容。CREATE TABLE RESLOG (LOGID VARCHAR2(20) NOT NULL, CLASS VARCHAR2(200), METHOD VARCHAR2(100), CREATETIME DATE, LOGLEVEL VARCHAR2(50), MSG VARCHAR2(4000))因为存储的类为类的全部路径,所以CLASS字段长度需要比较大。2、日志管理配置 LOG4J主要有两种配置文件.properties和.xml,这里以properties文件为基础来讲 述,关于XML文件的配置,相信大家看完下面的介绍也一样能轻松完成。 通常在LOG4J.PROPERTIES文件的第一行是: log4j.rootLogger= XXX,这句是控制日志的输出,如果想吧日志输出到数据库, 则需要在XXX中添加“DB”,如log4j.rootLogger=INFO,stdout,Platform,db。上面 这句就是把日志中级别为INFO的信息输出到STDOUT,PLATFORM和DB (DATABASE)中。 配置好如上的信息,LOG4J就知道用户是想把信息存入数据库,接下来我们就要来 配置数据库的相关信息(包括缓存,数据库连接信息,和执行SQL),配置信息如下: ###JDBCAppender log4j.appender.db = org.apache.log4j.jdbc.JDBCAppender //这个配置是选择使用JDBCAppender方法,将日志信息存储到数据库。当然,如果你还要做其他 *** 作,可以自己写个类,继承JDBCAppender就OK了。 log4j.appender.db.BufferSize=1 //这个配置是告诉LOG4J,有中国条日志信息后才存入数据库,我这里是1,就是说有一条就查一条,显然这样在生产环境下是很影响系统性能的。 log4j.appender.db.driver=oracle.jdbc.driver.OracleDriver //这个配置是告诉LOG4J,做数据库存储所用的驱动。 log4j.appender.db.URL=jdbc:oracle:thin:@:: //这个配置数据库连接的URL,不用说也都知道。 log4j.appender.db.user=XXX log4j.appender.db.password=XXX //上面两个是数据库连接时的用户名和密码 log4j.appender.db.sql=insert into RESLOG (LogId,Class,Method,createTime,LogLevel,MSG)values (SQ_RESLOG_LOGID.Nextval,'%C','%M', to_date('%d{yyyy-MM-dd HH:mm:ss}','yyyy-MM-ddHH24:mi:ss'),'%p','%m') //这个配置是告诉当LOG4J吧日志存储数据库时用的SQL语句。SQ_RESLOG_LOGID.Nextval是我建的一个SEQUENCE;‘%C’是日志中的CLASS;‘%M’是打印日志是执行到类里的方法;‘%d’是打印的时间,它支持格式化;‘%P’是日志级别,包括INFO、DEBUG、ERROR等;‘%m’是MSG,日志内容。注意这里的参数区分大小写。 log4j.appender.db.layout=org.apache.log4j.PatternLayout 通过上面的配置,现在再启动服务,LOG4J就会自动把原来存储在.LOG文件中的信息,同时存储到数据库

在 log4j2 中,可以通过配置 RollingFileAppender 的清理策略来实现自动清理日志,具体可以参照官网中对RollingFileAppender配置文件的介绍: https://logging.apache.org/log4j/2.x/manual/appenders.html#FileAppender 。

另外, log4j1 中的RollingFileAppender虽然无法实现自动清理日志的功能,但可以通过自己定义Appender来实现,可参照: log4j自动日志删除(转)

可以通过一个简单的样例来查看log4j2的自动清理日志功能, *** 作步骤如下:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10068427.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存