您的位置:首页 > 其它

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

2013-06-07 21:25 337 查看
  Log4j支持自定义输出。所有输出都是实现自Appender接口。一般来说,自定义输出只需要继承AppenderSkeleton类,并实现几个方法就可以了。

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

  

import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.spi.ErrorCode;
import org.apache.log4j.spi.LoggingEvent;

public class CountingConsoleAppender extends AppenderSkeleton {
int count = 0;// 记录日志的次数
int limit = 16;// 权限次数

public void setLimit(int limit) {// setter方法
this.limit = limit;
}

public int getLimit() {// getter方法
return limit;
}

@Override
public void close() {
if (this.closed)// 如果被关掉了
return;
this.closed = true;
}

@Override
public boolean requiresLayout() {// 需要使用布局
return true;
}

@Override
protected void append(LoggingEvent event) {
if (this.layout == null) {
// 没有设置出布局
errorHandler.error("没有设置[" + name + "]输出布局.", null,
ErrorCode.MISSING_LAYOUT);
return;
}
if (count >= limit) {
errorHandler.error("输出次数[" + limit + "]达到了[" + getName() + "]的极限",
null, ErrorCode.WRITE_FAILURE);
return;
}
System.out.println(this.layout.format(event));
if (layout.ignoresThrowable()) {
String[] t = event.getThrowableStrRep();
if (t != null) {
int len = t.length;
for (int i = 0; i < len; i++) {
System.out.println(t[i]);
}
}
}
count++;// 继续下次日志
}

}


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

log4j.rootLogger= DEBUG, COUNTING

log4j.appender.COUNTING=com.log4j.test.CountingConsoleAppender

#输出10次停止
log4j.appender.COUNTING.limit=10
log4j.appender.COUNTING.layout=org.apache.log4j.PatternLayout
log4j.appender.COUTIING.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss,SSS} [%C]-[%p] %m%n


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

log4j:ERROR 输出次数[10]达到了[COUNTING]的极限
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: