2

次のような多くのコードを使用して、いくつかのレガシーコードに取り組んでいます

private final Logger logger = LogManager.getLogger(ThisClassName.class);

ではなく、「ThisClassName.class」と入力する利点があるかどうか疑問に思っています

LogManager.getLogger(getClass());

私が知る限り、何もありませんが、getClass() の使用にマイナスの影響があるかどうか疑問に思っています。ありがとう。

4

5 に答える 5

11

を作成している場合はLogger static、 を使用できませんgetClass()

于 2009-02-18T22:35:28.003 に答える
6

また、実際にメソッドを呼び出しているサブクラスがある場合、 getClass() は実際のクラスを覆い隠します。たとえば、クラス A のメソッド X で log.debug() を呼び出し、クラス B がクラス A を拡張してメソッド X を上書きし、ある時点で super.X を呼び出すとします。ログ ファイルには、クラス A ではなく、クラス B が表示されます。

于 2009-02-18T22:41:21.717 に答える
2

getClass() は、静的コンテキストからは機能しません。ThisClassName.class は、静的変数とインスタンス変数に対して機能します。

于 2009-02-18T22:37:13.663 に答える
1

私は通常getClass()、インスタンス変数でバージョンを使用しますLogger(別のロガー インスタンスを作成するのではなく、単に 1 つ検索するだけです)。

この理由は、クラス階層では、スーパークラスのメソッド内からログが発生している場合でも、扱っているものの実際の型を知ることが役立つ場合があるためです。

通常、単純なテキスト検索を行うと、どのログ ステートメントが呼び出されているかが正確にわかります。そのため、実際に混乱することはありません。

于 2009-02-18T23:17:39.307 に答える
1

他の投稿者は、Logger を定義したい場合は getClass が機能しないとコメントしており、staticインスタンスごとに 1 つ定義するのは非効率的です。

実行時に正しいクラスを推測する必要があり、少なくとも Java 5 を使用している場合は、Java 5 API で log4j をラップするlog5jを参照してください。

これにより、次のようなものを書くことができます:

private static final Logger log = Logger.getLogger();

そしてさらに:

log.debug( "This thing broke: %s due to bar: %s on this thing: %s", foo, bar, car );
于 2009-02-19T10:13:22.943 に答える