4

ロギングにlog4jを使用しています。実行中にそれぞれのメソッドのクラス名を取得するために、SecurityManagerを使用してクラス名を取得する一般的なメソッドをいくつか取得しましたが、SecurityManagerを使用したくありません。実行時にクラス名を取得します。MyClass.getClassNameまた、すべてのクラスでクラス名を取得するために code( ) を書きたくありません。

class log extends SecurityManager {

public String getClassName() {
        return getClassContext()[3].getName();
    }

}
4

6 に答える 6

5

静的ロガーの解決策:

private static final Logger LOG = Logger.getLogger(new Object() { }.getClass().getEnclosingClass());
于 2015-04-01T09:03:22.233 に答える
4

フルネーム(パッケージ付き):

this.getClass().getName();

クラスの名前 (クラス名のみ):

this.getClass().getSimpleName();
于 2013-03-25T13:01:27.703 に答える
3

クラス名を受け取る代わりにLogger、クラス オブジェクト自体で を受け取ることもできます。

public static Logger getLogger(Class clazz)

使用方法は次のとおりです。

private static final Logger logger = Logger.getLogger(MyClass.class);

http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Logger.html#getLogger(java.lang.Class)

于 2013-03-25T13:04:29.810 に答える
2

アペンダー構成のPatternLayoutに を追加し%lて、ログ ステートメントの呼び出しクラスを取得できます。

于 2013-03-25T13:15:42.360 に答える
1

ログクラスを呼び出しているクラスのクラス名が必要だと思いますか?

これを試して:

StackTraceElement stackTraceElement = new Throwable().getStackTrace()[3];
于 2013-03-25T13:08:45.853 に答える
0

この方法でもできます:

private static final String CLASS_NAME = MyClass.class.getName();

log.debug(new LogRecord(CLASS_NAME," Success = "+isSuccess));
于 2013-03-25T13:04:59.217 に答える