9

log4j2 を使用しており、すべてのメッセージにプレフィックスを追加したいと考えています。このプレフィックスはコンストラクタ パラメータに渡され、クラスのインスタンスに依存します。つまり、オブジェクト レベルです (クラスやスレッドではありません)。

たとえば、 のAようにインスタンス化されたクラスがあるので、このクラスでnew A(152)使用すると、メッセージの直前に が書き込まれます。の場合、代わりに が表示されます。log.error("message")152:new A(155)155:

ご協力いただきありがとうございます

4

5 に答える 5

7

MDC を使用してこれを達成する

コンストラクターに入れます

 MDC.put("prefix", yourvalue);

XMLでは、パターンでこのように使用します

      %X{prefix}
于 2013-05-23T20:18:10.100 に答える
5

Bill Clarsの回答に基づく:

public class LogWrapper
{
    private Logger log;
    private String prefix;

    public LogWrapper(Logger log, String prefix) {
        this.log = log;
        this.prefix = prefix;
    }

    public void error(String msg)
    {
        log.error(prefix + ": " + msg);
    }
}

次に、クラスのインスタンス変数として設定します

public class MyClass {
    private LogWrapper log;

    public MyClass(int prefix) {
        log = new LogWrapper(Logger.getLogger(this.getClass()), String.valueOf(prefix));

        // then log away
        log.error("Test");
    }
}
于 2013-05-23T20:23:43.870 に答える
1

簡単な回避策の 1 つを次に示します。プレフィックスを追加するメソッドで文字列をラップし、error連結された文字列をメソッドに返すことができます。

public class A {
    private static final Logger LOG = LogManager.getLogger();

    final int index;

    public A(int index) {
        this.index = index;
    }

    public static void f(String message) {
        return String.valueOf(index) + ": ";
    }

    public void method() {

        // ...

        LOG.error(f("message"));

    }

}

利点:

  • 単純
  • 1 つのクラス/メソッドでプレフィックスの有無にかかわらずメッセージをログに記録できます
  • %X{prefix}log4j2 構成のようなものを永続的に追加する必要はありません

短所:

  • プレフィックスを追加する場合は、常にラッパー メソッドを使用する必要があります。
于 2014-08-25T18:13:15.500 に答える
0

これを試して

public void writeError(String msg,int intValue) {
logger.error(intValue+" "+msg);
}
于 2013-05-23T20:23:30.563 に答える