1

これが可能かどうかはわかりませんが、log4j を使用してデータをログアウトできるようにしたいと考えています。しかし、log.info() ステートメントの実際の場所ではなく、呼び出し関数のメソッド名、行などを、ログ データとしてではなく、通常のフィールドで log4j によって表示することをお勧めします。

ログ イベントのデータ フィールドをオーバーライドすることはできますか?

public class Foo
{
    public static void info(String msg)
    {
        Logger aLogger = Logger.getRootLogger();

        // -- Set the calling function location info here

        aLogger.info(msg);
     }
}


public class Bar
{
    public void test()
    {
        Foo.info("x");   // -- Want this line, file, class, method logged
    }
}
4

1 に答える 1

0

私はあなたがやっていることを正確にフォローしているとは確信していませんが、AspectJ があなたの問題を解決できるようです。

ロガーのメソッドへの呼び出しをラップするアスペクトを作成する場合、呼び出し元のメソッド/クラスを抽出し、実際のロガーに送信されるパラメーターをオーバーライドできます ( ProceedingJoinPointを使用)。

Log4j のどこで独自の行番号、クラス情報などを指定できるかは完全にはわかりませんが、何かがどこかにあるに違いないと思います。それ以外の場合は、その情報を指定できるロガーの独自の実装を作成する必要があります。

于 2014-10-20T20:19:00.793 に答える