@Plugin(name = "LogAlarmFilter", category = "Core", elementType = "filter", printObject = true)public class LogAlarmFilter extendsAbstractFilter {private static final Logger logger = LoggerFactory.getLogger(LogAlarmFilter.class);private static Set logFilterItems =Sets.newConcurrentHashSet();private static String regExStr = "";private static Pattern pattern =Pattern.compile(regExStr);publicLogAlarmFilter() {super(Result.NEUTRAL, Result.NEUTRAL);
}privateResult filter(Level level, String msg){if (level == null || msg == null){returnResult.NEUTRAL;
}if ("ERROR".equalsIgnoreCase(level.toString())){
Matcher matcher=pattern.matcher(msg);if(matcher.find()){returnResult.DENY;
}else{//如果不处理,一定要返回NEUTRAL,否则会影响其他Filter的执行
returnResult.NEUTRAL;
}
}returnResult.NEUTRAL;
}
@PluginFactorypublic staticLogAlarmFilter createFilter(){return newLogAlarmFilter();
}private static synchronized voidcompileFilterItems(){
regExStr= Joiner.on("|").join(logFilterItems);
pattern=Pattern.compile(regExStr);
logger.info("Update regExStr:[{}]", regExStr);
}public staticBoolean delFilterItem(String item){if(StringUtils.isBlank(item)){returnBoolean.FALSE;
}if (!logFilterItems.contains(item)){returnBoolean.TRUE;
}
logFilterItems.remove(item);
compileFilterItems();returnBoolean.TRUE;
}public staticBoolean addFilterItem(String item){if(StringUtils.isBlank(item)){returnBoolean.FALSE;
}if(logFilterItems.contains(item)){returnBoolean.TRUE;
}
logFilterItems.add(item);
compileFilterItems();returnBoolean.TRUE;
}
@OverridepublicResult filter(LogEvent event) {returnfilter(event.getLevel(), event.getMessage().getFormattedMessage());
}
@OverridepublicResult filter(org.apache.logging.log4j.core.Logger logger, Level level, Marker marker, Message msg, Throwable t) {returnfilter(level, msg.getFormattedMessage());
}
@OverridepublicResult filter(org.apache.logging.log4j.core.Logger logger, Level level, Marker marker, Object msg, Throwable t) {returnfilter(level, msg.toString());
}
@OverridepublicResult filter(org.apache.logging.log4j.core.Logger logger, Level level, Marker marker, String msg, Object... params) {returnfilter(level, msg);
}
@OverridepublicResult filter(org.apache.logging.log4j.core.Logger logger, Level level, Marker marker, String msg, Object p0) {returnfilter(level, msg);
}
@OverridepublicResult filter(org.apache.logging.log4j.core.Logger logger, Level level, Marker marker, String msg, Object p0, Object p1) {returnfilter(level, msg);
}
@OverridepublicResult filter(org.apache.logging.log4j.core.Logger logger, Level level, Marker marker, String msg, Object p0, Object p1, Object p2) {returnfilter(level, msg);
}
@OverridepublicResult filter(org.apache.logging.log4j.core.Logger logger, Level level, Marker marker, String msg, Object p0, Object p1, Object p2, Object p3) {returnfilter(level, msg);
}
@OverridepublicResult filter(org.apache.logging.log4j.core.Logger logger, Level level, Marker marker, String msg, Object p0, Object p1, Object p2, Object p3, Object p4) {returnfilter(level, msg);
}
@OverridepublicResult filter(org.apache.logging.log4j.core.Logger logger, Level level, Marker marker, String msg, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5) {returnfilter(level, msg);
}
@OverridepublicResult filter(org.apache.logging.log4j.core.Logger logger, Level level, Marker marker, String msg, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6) {returnfilter(level, msg);
}
@OverridepublicResult filter(org.apache.logging.log4j.core.Logger logger, Level level, Marker marker, String msg, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7) {returnfilter(level, msg);
}
@OverridepublicResult filter(org.apache.logging.log4j.core.Logger logger, Level level, Marker marker, String msg, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7, Object p8) {returnfilter(level, msg);
}
@OverridepublicResult filter(org.apache.logging.log4j.core.Logger logger, Level level, Marker marker, String msg, Object p0, Object p1, Object p2, Object p3, Object p4, Object p5, Object p6, Object p7, Object p8, Object p9) {returnfilter(level, msg);
}
}