12

log4j PatternLayoutlog4j patternLayout)で使用した場合にこれら2つのlog4j変換文字を使用することの正確な違いを確立するのに問題があります

  • カテゴリ(%c)
  • クラス(%C)

誰かが私にそれらの2つが異なる例を教えてもらえますか?

カテゴリは常にクラス名と一致しませんか?

よろしく、

4

1 に答える 1

18

Xドキュメントで提案されている一般的な方法でロガーを初期化し、クラス内で使用する場合も同じです。

Logger logger = Logger.getLogger(com.foo.X.class);

ロガー名(「com.foo.X.class.getName()」によって構築される)は、ロギングステートメントが発行されたクラス名と一致するため、とについても同じに%cなります。%C

ロガーを「何か」と呼ぶ

Logger logger = Logger.getLogger("something");

の「何か」%cとのクラス名があり%Cます。

%Cこれは、現在のスレッドのスタックトレースからlog4jによって計算されるため、%c単なる文字列であるとは異なり、パフォーマンスに大きな影響を与えることに注意してください。あなたはそれを検証するために興味深い実験を行うことができます:

package com.foo;

class A {
     private Logger = Logger.getLogger(B.class);
     // ...
     logger.log("inside A class");
}

がパッケージに含まれていると[%c][%m]仮定した場合の出力は次のようになります。Bcom.foo

[com.foo.B][inside A class]

[%C][%m]の場所に関係なく、パターンの出力は次のBようになります。

[com.foo.A][inside A class]
于 2011-10-21T22:05:57.590 に答える