zoukankan      html  css  js  c++  java
  • 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]的极限
  • 相关阅读:
    BZOJ 2034 【2009国家集训队】 最大收益
    vijos P1780 【NOIP2012】 开车旅行
    BZOJ 2115 【WC2011】 Xor
    BZOJ 3631 【JLOI2014】 松鼠的新家
    BZOJ 4717 改装
    BZOJ 2957 楼房重建
    BZOJ 4034 【HAOI2015】 T2
    BZOJ 1834 【ZJOI2010】 network 网络扩容
    BZOJ 2440 【中山市选2011】 完全平方数
    BZOJ 2733 【HNOI2012】 永无乡
  • 原文地址:https://www.cnblogs.com/ArtsCrafts/p/log4j6.html
Copyright © 2011-2022 走看看