Log4j使用ScriptFilter

发布时间:2022-06-21 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Log4j使用ScriptFilter脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

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,请注明来意。
标签: