繁体   English   中英

如何过滤log4j2中未设置任何标记?

[英]How to filter for no marker set in log4j2?

我想以这样的方式配置log4j2,以记录所有没有标记的消息。 仅当配置文件中对此标记有特殊的ACCEPT规则时,才应记录带有标记的所有消息。

我没有找到任何可以检测到“无标记集”情况的过滤器规则。 有什么需要我自己实现的吗?

log4j2配置的过滤器部分可能类似于以下示例,但是NoMarkerFilter语句应能够捕获未设置标记的情况。

<Filters>
        <MarkerFilter marker="SQL_UPDATE" onMatch="ACCEPT" onMismatch="NEUTRAL" />
        <NoMarkerFilter onMatch="ACCEPT" onMismatch="DENY" />
</Filters>

更新-2019年7月

NoMarkerFilter是2.12.0版中log4j的一部分

这样,仅以下配置将起作用:

<Filters>
        <MarkerFilter marker="SQL_UPDATE" onMatch="ACCEPT" onMismatch="NEUTRAL" />
        <NoMarkerFilter onMatch="ACCEPT" onMismatch="DENY" />
</Filters>


我遇到了类似的问题,找不到log4j2可用的任何此类实现。 必须自己实施。

@Plugin(name = "NoMarkerFilter", category = Node.CATEGORY, elementType = Filter.ELEMENT_TYPE, printObject = true)
public class NoMarkerFilter extends AbstractFilter {


  private NoMarkerFilter(final Result onMatch, final Result onMismatch) {
    super(onMatch, onMismatch);
  }

  @Override
  public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,
                       final Object... params) {
    return filter(marker);
  }

  @Override
  public Result filter(final Logger logger, final Level level, final Marker marker, final Object msg,
                       final Throwable t) {
    return filter(marker);
  }

  @Override
  public Result filter(final Logger logger, final Level level, final Marker marker, final Message msg,
                       final Throwable t) {
    return filter(marker);
  }

  @Override
  public Result filter(final LogEvent event) {
    return filter(event.getMarker());
  }

  @Override
  public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,
                       final Object p0) {
    return filter(marker);
  }

  @Override
  public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,
                       final Object p0, final Object p1) {
    return filter(marker);
  }

  @Override
  public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,
                       final Object p0, final Object p1, final Object p2) {
    return filter(marker);
  }

  @Override
  public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,
                       final Object p0, final Object p1, final Object p2, final Object p3) {
    return filter(marker);
  }

  @Override
  public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,
                       final Object p0, final Object p1, final Object p2, final Object p3,
                       final Object p4) {
    return filter(marker);
  }

  @Override
  public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,
                       final Object p0, final Object p1, final Object p2, final Object p3,
                       final Object p4, final Object p5) {
    return filter(marker);
  }

  @Override
  public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,
                       final Object p0, final Object p1, final Object p2, final Object p3,
                       final Object p4, final Object p5, final Object p6) {
    return filter(marker);
  }

  @Override
  public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,
                       final Object p0, final Object p1, final Object p2, final Object p3,
                       final Object p4, final Object p5, final Object p6,
                       final Object p7) {
    return filter(marker);
  }

  @Override
  public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,
                       final Object p0, final Object p1, final Object p2, final Object p3,
                       final Object p4, final Object p5, final Object p6,
                       final Object p7, final Object p8) {
    return filter(marker);
  }

  @Override
  public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,
                       final Object p0, final Object p1, final Object p2, final Object p3,
                       final Object p4, final Object p5, final Object p6,
                       final Object p7, final Object p8, final Object p9) {
    return filter(marker);
  }

  private Result filter(final Marker marker) {
    return null == marker ? onMatch : onMismatch;
  }

  /**
   * Create the NoMarkerFilter.
   *
   * @param match    The action to take if a match occurs.
   * @param mismatch The action to take if no match occurs.
   * @return A NoMarkerFilter.
   */
  @PluginFactory
  public static NoMarkerFilter createFilter(
      @PluginAttribute("onMatch") final Result match,
      @PluginAttribute("onMismatch") final Result mismatch) {
    return new NoMarkerFilter(match, mismatch);
  }
}

这样,以下配置应该可以工作:

<Filters>
        <MarkerFilter marker="SQL_UPDATE" onMatch="ACCEPT" onMismatch="NEUTRAL" />
        <NoMarkerFilter onMatch="ACCEPT" onMismatch="DENY" />
</Filters>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM