簡體   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