log4j日志处理实战
Posted ty_laurel
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了log4j日志处理实战相关的知识,希望对你有一定的参考价值。
前边博文介绍学习了log4j的基本功能及使用,接下来根据Log4j已有的实现方法结合实际需求进行二次开发,以更好的满足实际的需求。
Log4j概述
Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务 器、NT的事件记录器、UNIXSyslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
需求介绍
Log4j中有org.apache.log4j.FileAppender类,该类实现了将日志文件输出到文件,其有两个子类(更详尽的信息参看http://logging.apache.org/log4j/1.2/apidocs/):
DailyRollingFileAppender:实现了根据时间对日志文件进行切割,主要的成员变量为
private String datePattern = "'.'yyyy-MM-dd"; //按天切割日志文件
RollingFileAppender:实现了根据日志文件的大小对日志文件切割,而且还可以指定日志文件的个数,超过指定个数的日志文件将会被删除。主要是依靠成员变量:
protected long maxFileSize = 10*1024*1024; //默认的日志文件大小
protected int maxBackupIndex = 1; //默认的日志文件个数
这些成员变量信息都可以在Log4j的配置文件log4j.properties中重新指定新值。
现在要做的就是将RollingFileAppender和DailyRollingFileAppender类的功能结合起来,保证DailyRollingFileAppender大框架不变的前提下支持maxBackupIndex参数,以及可以实现超过指定日志文件个数的日志文件被删除。
实现步骤
代码中主要使用了java.util包中的集合类和java.io包中的File类。
1.在DailyRollingFileAppender类中添加maxBackupIndex属性;
2.定义了日志文件的后缀是日期格式,如log1.log-2016-10-23-12,使用File类获取目录的日志文件;
3.将文件按日期排序存储在Map集合中(相当于白名单),存储的个数为指定的maxBackupIndex个;
4.遍历日志目录文件,使用集合的comtains方法依次判断是否是白名单中的,不属于的即就是距离现在最远的文件,则调用定义的delete方法实现删除多余的文件;
用到的知识点主要是以下几个,如下 Log4j介绍: http://blog.csdn.net/ty_laurel/article/details/52894205 泛型: http://blog.csdn.net/ty_laurel/article/details/52945218 Map集合: http://blog.csdn.net/ty_laurel/article/details/52834438
代码地址: https://github.com/ty92/log4j-development
以上是关于log4j日志处理实战的主要内容,如果未能解决你的问题,请参考以下文章