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]的极限
  • 相关阅读:
    “连城决”——预示2008年手机营销体式格式新打破
    都会演出连城诀—诺基亚N78决战入手入手了!
    Lyx:阔别单调的 LaTeX 节制命令
    [转载]Oracle 11g R1下的自动内存经管(2)
    假造化手艺是决胜企业IT化的关头
    请各位博友对HyperV的运用终了指摘
    有199元的Office,还要用盗版吗?
    十一回南通,当晚和同学去小石桥附近的网吧
    Windows 消息
    WinAPI: 钩子回调函数之 MsgFilterProc
  • 原文地址:https://www.cnblogs.com/ArtsCrafts/p/log4j6.html
Copyright © 2011-2022 走看看