脚本宝典收集整理的这篇文章主要介绍了Log4j使用ScriptFilter,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
由于最近做log4j版本升级为2版本的,看了下配置这块,刚好项目中定时任务老刷日志,很烦!!!,想到通过配置将控制台中定时任务线程的日志给拦截掉,百度了下基本都是去继承AbstractFilter,我又不想新增了个类,看了下Log4j官方实现的Filter,决定用ScriptFilter来拦截掉指定线程日志(还可以更多diy)
<!-- 控制台日志配置 -->
<!-- 控制台日志配置 -->
<Appender type="Console" name="Stdout">
<!-- 脚本拦截器(判断是否输出定时任务日志,定时任务老刷日志很烦!!当前配置为不拦截,需要拦截请将注释放开 ) -->
<ScriptFilter onMatch="DENY" onMisMatch="NEUTRAL">
<Script name="TimerLogFilter" language="javascript">
<![CDATA[
var dd = logEvent.getThreadName().startsWith("Timer");
dd;
]]>
</Script>
</ScriptFilter>
<!-- 指定日志输出格式 -->
<Layout type="PatternLayout" pattern="[%t] [%-5p] %d{HH:mm:ss.SSS} %c %m %n"/>
</Appender>
public final class ScriptFilter extends AbstractFilter {
private static Logger logger = StatusLogger.getLogger();
private final AbstractScript script;
private final Configuration configuration;
// 当ScriptFilter放在xml的Configuration节点下进这里,就可以用bindings的数据完成自己的需求啦
public Result filter(final org.apache.logging.log4j.core.Logger logger, final Level level, final Marker marker, final String msg, final Object... params) {
SimpleBindings bindings = new SimpleBindings();
bindings.put("logger", logger);
bindings.put("level", level);
bindings.put("marker", marker);
bindings.put("message", new SimpleMessage(msg));
bindings.put("parameters", params);
bindings.put("throwable", (Object)null);
bindings.putAll(this.configuration.getProperties());
bindings.put("substitutor", this.configuration.getStrSubstitutor());
Object object = this.configuration.getScriptManager().execute(this.script.getName(), bindings);
return object != null && Boolean.TRUE.equals(object) ? this.onMatch : this.onMismatch;
}
// 当ScriptFilter放在xml的Appender节点下进这里,就可以用bindings的数据完成自己的需求啦
public Result filter(final LogEvent event) {
SimpleBindings bindings = new SimpleBindings();
bindings.put("logEvent", event);
bindings.putAll(this.configuration.getProperties());
bindings.put("substitutor", this.configuration.getStrSubstitutor());
Object object = this.configuration.getScriptManager().execute(this.script.getName(), bindings);
return object != null && Boolean.TRUE.equals(object) ? this.onMatch : this.onMismatch;
}
}
以上是脚本宝典为你收集整理的Log4j使用ScriptFilter全部内容,希望文章能够帮你解决Log4j使用ScriptFilter所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。