web-dev-qa-db-ja.com

ロガーを取得するためのgetSimpleName()とgetName()の使用

_log4j_を使用するコードを見たことがあります。これは、特定のloggerに対してLoggerを取得します。

_static public Logger getLogger(String name)
_

そして

_static public Logger getLogger(Class clazz)
_

前者のAPIはgetSimpleName()で明示的に渡され、後者は渡されたClassgetName()を使用します。これら2つの間に違いはありますか? log4j.propertiesファイルに異なるレベルでログを記録するようにさまざまなパッケージを構成した場合、影響はありますか?

19
kuriouscoder

はい、大きな違いがあります。

simpleNameインスタンスにLoggerを使用することはありません。これは、パッケージ名を削除するためです。同じクラス名が2つの異なるパッケージに存在する場合(両方のクラスが同じロガーインスタンスを取得することにつながる)の問題は別として、ロガーの継承を制御する機能が失われます。

例えば2つのロガーの場合:

com.foo.A
com.foo.B

プロパティでは、私はただ持つことができます:

log4j.logger.com.foo=DEBUG,CONSOLE
23
kunal

例えば。私のクラスShapeDemo.Javaはcom.testパッケージにあり、次のようなコードを記述しました。

System.out.println("Name-->"+ShapeDemo.class.getName());
System.out.println("SimpleName-->"+ShapeDemo.class.getSimpleName());

これは次のように出力されます

Name-->com.test.ShapeDemo
SimpleName-->ShapeDemo
17
user2481237

私はフルネーム(Class.getName())を使用することを好みます。パッケージが正しく編成されている場合、これにより、log4jを調整して、Javaパッケージツリーのさまざまな部分から発信されたさまざまなログメッセージを処理できます。

たとえば、「com.mycompany.infra」で始まるパッケージ内のすべてのクラスを簡単に構成して、特定のアペンダーを使用し、レベルWARN以上のメッセージのみをログに記録できます。

5
Eyal Schneider

This.getClass()。getName();の使用

戻り値:alin.iwin.flickrbrowser.GetRawData

その間

プライベート文字列LOG_TAG = this.getClass()。getSimpleName();

戻り値のみ:GetRawData。

4
Coman

異なるパッケージに同じsimpleNameを持つクラスが多数あると、混乱する可能性があります。同じ名前のロガーが多数あることは、そうでなければ問題にはならないはずです-混乱する可能性があります。

2
Armand