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]的极限
  • 相关阅读:
    某公司的软件测试笔试题,要是不看书,有的题目还真是不好答
    性能测试面试题总结(答案全)
    最简单实用的docker专题
    什么是LAMP和WAMP,一篇文章和你讲清楚
    版本管理工具Visual SourceSafe的超详细使用教程
    抓包工具Fidder详解(主要来抓取Android中app的请求)
    除了angular/vue/react的新轮子lit
    你可以在浏览器中直接运行 TypeScript 吗?
    Introducing the .NET Hot Reload experience for editing code at runtime
    vscode编辑器快捷方式
  • 原文地址:https://www.cnblogs.com/ArtsCrafts/p/log4j6.html
Copyright © 2011-2022 走看看