package com.sohu.cache.log.statistic; import ch.qos.logback.classic.Level; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.classic.spi.IThrowableProxy; import ch.qos.logback.core.AppenderBase; import com.google.common.util.concurrent.AtomicLongMap; /** * 自定义Appender,用于统计异常名和数量键值对 * @author leifu * @Time 2014年10月17日 */ public class ErrorStatisticsAppender extends AppenderBase<ILoggingEvent> { /** * guava的AtomicLongMap */ public static final AtomicLongMap<String> ERROR_NAME_VALUE_MAP = AtomicLongMap.create(); @Override protected void append(ILoggingEvent event) { if (event == null) { return; } if (event.getLevel() == Level.ERROR || event.getLevel() == Level.WARN) { IThrowableProxy throwableProxy = event.getThrowableProxy(); if (throwableProxy != null) { //接口名 String errorClassName = throwableProxy.getClassName(); if (errorClassName != null && !"".equals(errorClassName.trim())) { //写入AtomicLongMap并计数 ERROR_NAME_VALUE_MAP.getAndIncrement(errorClassName); } } } } }