パフォーマンスの観点から、ログにクラス名を含めるために何を使用するのが良いですか?パターンレイアウトでは、%Fのドキュメントに次のような警告が表示されます。
ロギング要求が発行されたファイル名を出力するために使用されます。
警告発信者の位置情報の生成は非常に遅いため、実行速度が問題にならない限り、回避する必要があります。
classNameを取得するには、log4jは次のような呼び出しを行います。
String className = new Throwable().getStackTrace()[3].getClassName();
ご覧のとおり、これは単純な結果を得るために多くの作業を行います。getClass()。getSimpleName()を使用する方が比較的効率的ですが、これをキャッシュできる場合はより良いでしょう。
HotSpotには内部でこのメソッドがありますが、これは内部使用のみであるため使用されていないと思います。私見、これが利用可能かどうかを検出し、利用可能であればそれを使用したほうがよかったでしょう。
Class class = sun.reflect.Reflection.getCallerClass(int stackDepth);
%F %M %L
Javaのリフレクションまたはスタックバックトレースを介して実現されるため、これは期待するほど高速ではありません。クラスには固定名を使用することをお勧めします。たとえば、でロガーを作成しclass.getName()
ます。