1

Java では、ロガーを作成するために、呼び出す代わりに

private static final Logger logger = LoggerFactory.getLogger("ClassName");

スタック トレースからクラス名を返し、そのメソッドを呼び出すユーティリティ メソッドを作成しました。

private static final Logger logger = LoggerFactory.getLogger(Utilities.getInvokingClassName());

Utilities.java:

public static String getInvokingClassName()
{
    return new Throwable().getStackTrace()[1].getClassName();
}

短所は明らかにリソース集約型のプロセスを使用していることですが、長所はコーディング時のモジュール性が高いことです。問題は、これによるパフォーマンスへの影響がどれほど大きいかということです。リソースをあまり消費しないのであれば、なぜそれが標準的な方法ではないのでしょうか?

4

3 に答える 3

6

これは大きなパフォーマンス ヒットではありませんが、非常に単純なシナリオを過度に複雑にするため、おそらく使用されません。コードはもう少しモジュール化されているかもしれませんが、読みにくく、理解しにくくなります。

于 2013-01-07T21:09:01.133 に答える
3

Class オブジェクトを渡すことでロガーを作成できます。ロガーを取得するたびに、通常これを行います。

public class Foo {
    private static final Logger LOG = LoggerFactory.getLogger(Foo.class);
...

これは、クラス名を入力するよりも簡単で、通常はクイック検索置換と IDE コード アシストの恩恵を受けます。あなたのアプローチは少しトリッキーすぎて、それ自体が読みにくいと思います。

于 2013-01-07T21:20:20.207 に答える
1

実際、次のような簡単なことを行うことができるので、あなたは自分自身を少し複雑にしすぎていると思います:

this.getClass().getName()

次に、これを次のように書き直すことができます。

Logger logger = LoggerFactory.getLogger(this.getClass().getName());

以上です。

于 2015-05-04T20:41:27.910 に答える