2

質問のタイトルが少し生々しいことは知っていますが、1 つのステートメントで明確にしようとすればするほど、うまくいきませんでした。とにかく、Web アプリケーション プロジェクトでは、Log4j を使用してすべてのアクション (およびその内部で発生するエラー) をログに記録する必要があります。プロジェクトには何百ものクラスがあり、クラスごとに Logger オブジェクトを持たないようにしたいと考えています。ロギングに必要なレベルは ERROR です。そこで、Logger オブジェクトの「error()」メソッドを処理する静的メソッドを含むカスタム クラスを考えました。以下に示すように:

public class LoggerUtil {

    public static void error(String message, Object classObject) {
        String className = classObject.getClass().getName();
        Logger logger = LogManager.getLogger(className);
        logger.error(message);
    }
}

そのため、「LoggerUtil.error(message, this.getClass().getName())」がプロジェクトのどこかで呼び出されるたびに、現在のクラスの関連ロガーによって何かをログに記録できます。問題は、これが機能していないように見えることです。特定のクラスに関連するロガーを別のクラスでインスタンス化することはできないと思います。LoggerUtil.error() が 1 つのクラスで呼び出されると、与えられた ERROR ログは、ソース (java.lang.String) として無関係なクラスを示します。このアイデアを機能させる方法があるのだろうか?

[更新]: 問題が解決しました。設計に問題がありましたが、次のように修正されました。

public class LoggerUtil {

    public static void error(String message, String className) {
        Logger logger = LogManager.getLogger(className);
        logger.error(message);
    }
}

2 番目の引数が String に変更されたため、クラス名がメソッドに直接渡されます。ロガーは現在正常に動作しています。

4

1 に答える 1