Log4j详细介绍(六)自定义输出

  Log4j支持自定义输出。所有输出都是实现自Appender接口。一般来说,自定义输出只需要继承AppenderSkeleton类,并实现几个方法就可以了。

  看一个自定义输出的例子。CountingConsoleAppender跟控制台输出类似,不同的是会统计日志输出的次数。当输出次数超过预定的值时,会做相应的业务处理(这里为打印一行提示信息),并停止输出,代码如下。

  

 1 import org.apache.log4j.AppenderSkeleton;
 2 import org.apache.log4j.spi.ErrorCode;
 3 import org.apache.log4j.spi.LoggingEvent;
 4 
 5 public class CountingConsoleAppender extends AppenderSkeleton {
 6     int count = 0;// 记录日志的次数
 7     int limit = 16;// 权限次数
 8 
 9     public void setLimit(int limit) {// setter方法
10         this.limit = limit;
11     }
12 
13     public int getLimit() {// getter方法
14         return limit;
15     }
16 
17     @Override
18     public void close() {
19         if (this.closed)// 如果被关掉了
20             return;
21         this.closed = true;
22     }
23 
24     @Override
25     public boolean requiresLayout() {// 需要使用布局
26         return true;
27     }
28 
29     @Override
30     protected void append(LoggingEvent event) {
31         if (this.layout == null) {
32             // 没有设置出布局
33             errorHandler.error("没有设置[" + name + "]输出布局.", null,
34                     ErrorCode.MISSING_LAYOUT);
35             return;
36         }
37         if (count >= limit) {
38             errorHandler.error("输出次数[" + limit + "]达到了[" + getName() + "]的极限",
39                     null, ErrorCode.WRITE_FAILURE);
40             return;
41         }
42         System.out.println(this.layout.format(event));
43         if (layout.ignoresThrowable()) {
44             String[] t = event.getThrowableStrRep();
45             if (t != null) {
46                 int len = t.length;
47                 for (int i = 0; i < len; i++) {
48                     System.out.println(t[i]);
49                 }
50             }
51         }
52         count++;// 继续下次日志
53     }
54 
55 }

 其中最大输出次数可以在log4j.properties中配置。配置代码如下:

1 log4j.rootLogger= DEBUG, COUNTING
2 
3 log4j.appender.COUNTING=com.log4j.test.CountingConsoleAppender
4 
5 #输出10次停止
6 log4j.appender.COUNTING.limit=10
7 log4j.appender.COUNTING.layout=org.apache.log4j.PatternLayout
8 log4j.appender.COUTIING.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss,SSS} [%C]-[%p] %m%n

设定输出次数为10.当输出超过10次后,该自定义Appender会输出下面的信息,并停止输出:

1 log4j:ERROR 输出次数[10]达到了[COUNTING]的极限
原文地址:https://www.cnblogs.com/ArtsCrafts/p/log4j6.html