_log4j
_を使用するコードを見たことがあります。これは、特定のlogger
に対してLogger
を取得します。
_static public Logger getLogger(String name)
_
そして
_static public Logger getLogger(Class clazz)
_
前者のAPIはgetSimpleName()
で明示的に渡され、後者は渡されたClass
でgetName()
を使用します。これら2つの間に違いはありますか? log4j.propertiesファイルに異なるレベルでログを記録するようにさまざまなパッケージを構成した場合、影響はありますか?
はい、大きな違いがあります。
simpleName
インスタンスにLogger
を使用することはありません。これは、パッケージ名を削除するためです。同じクラス名が2つの異なるパッケージに存在する場合(両方のクラスが同じロガーインスタンスを取得することにつながる)の問題は別として、ロガーの継承を制御する機能が失われます。
例えば2つのロガーの場合:
com.foo.A
com.foo.B
プロパティでは、私はただ持つことができます:
log4j.logger.com.foo=DEBUG,CONSOLE
例えば。私のクラスShapeDemo.Javaはcom.testパッケージにあり、次のようなコードを記述しました。
System.out.println("Name-->"+ShapeDemo.class.getName());
System.out.println("SimpleName-->"+ShapeDemo.class.getSimpleName());
これは次のように出力されます
Name-->com.test.ShapeDemo
SimpleName-->ShapeDemo
私はフルネーム(Class.getName())を使用することを好みます。パッケージが正しく編成されている場合、これにより、log4jを調整して、Javaパッケージツリーのさまざまな部分から発信されたさまざまなログメッセージを処理できます。
たとえば、「com.mycompany.infra」で始まるパッケージ内のすべてのクラスを簡単に構成して、特定のアペンダーを使用し、レベルWARN以上のメッセージのみをログに記録できます。
This.getClass()。getName();の使用
戻り値:alin.iwin.flickrbrowser.GetRawData
その間
プライベート文字列LOG_TAG = this.getClass()。getSimpleName();
戻り値のみ:GetRawData。
異なるパッケージに同じsimpleName
を持つクラスが多数あると、混乱する可能性があります。同じ名前のロガーが多数あることは、そうでなければ問題にはならないはずです-混乱する可能性があります。