3

MapFilters について簡単な質問があります。ええと、私はマップが何であるかを知っています: 単純なキーと値のペアです。現在、log4j では、いわゆるマップ メッセージをフィルタリングできます ( Web サイトの例):

  <MapFilter onMatch="ACCEPT" onMismatch="DENY" operator="or">
    <KeyValuePair key="eventId" value="Login"/>
    <KeyValuePair key="eventId" value="Logout"/>
  </MapFilter>

しかし、これらのメッセージをコードのどこで定義すればよいでしょうか。私は次のように試しました:

    MapMessage mm = new MapMessage();
    mm.put("eventId", "Login");
    logger.exit(mm);

しかし、これはこれを処理するための便利な方法ではありません。ちなみに、これは機能しません。

このトピックのより詳細な紹介を知っていますか? ここでは、API はあまり役に立ちません。

皆さんに感謝します!

4

1 に答える 1

3

の構成中に上記の問題に遭遇しましたMapFilterThreadContextMapFilter同様の方法で機能しますが、その場合はThreadContextマップにデータを入力する必要があり、すべて正常に機能します。成功の背後にある理由ThreadContextMapFilterは、ThreadContextマップがコンテキスト ベースであり、同じコンテキスト内のすべてのログ イベントに対して有効ですが、コンテキスト ベースMapFilterMapMessageはなくイベント ベース (MapMessage) に基づいて機能するため、各ロギング イベントでを機能させるには、 MapMessageas パラメータを渡す必要がありますMapFilter

関連する構成とコード:

<configuration status="WARN" name="abcd">
    <properties/>
    <MapFilter onMatch="ACCEPT" onMismatch="DENY">
        <KeyValuePair key="Mic" value="Mic123"/>
    </MapFilter>                 
        ...........
        ........... <<Put other relevant configurations here>>
</configuration>

Java コード:

public static void main(String args[]) {
    MapMessage mapMessage = new MapMessage();

    mapMessage.put("Mic", "Mic123");
    log4j2Tester.logger.debug(mapMessage,new Exception("Okies"));
    log4j2Tester.logger.debug(mapMessage);
}

上記のコードでlog4j2Testerは、 はスタンドアロン クラスのオブジェクトでありlogger、構成されたロガーです。

この投稿があなたの問題を解決することを願っています。ハッピーコーディング。

于 2013-05-19T09:18:59.487 に答える