3

logger.warn メソッドの機能を拡張する最も簡単な方法は何ですか?

次のコードを検討してください。

logger.warn("Invalid value ({}). Defaulting to UNKNOWN.", value);

また、スタック トレースを出力するか、警告が発生するたびに特別なことを行いたいと考えています。例えば:

logger.warn("Invalid value ({}). Defaulting to UNKNOWN.", value);
for (StackTraceElement stackTraceElement:Thread.currentThread().getStackTrace()) {
  logger.warn(stackTraceElement.toString());
}

ロガーメソッドに「forループ」を入れたいと思います。何かのようなもの。

public void warn (String s, Object o) {
  super(s, o);
  for (StackTraceElement stackTraceElement:Thread.currentThread().getStackTrace()) {
    logger.warn(stackTraceElement.toString());
  }
}

それを行うためにロガーを拡張する簡単な方法はありますか?

4

1 に答える 1

0

SLF4JAPIの一部であるマーカーがその方法です残念ながら、SLF4JAPIをネイティブに実装するログバックフレームワークのみがマーカーをサポートします。さらに、指定されたログバックの%caller変換は、すぐに説明したユースケースをすでにサポートしています。

%caller変換ワードをパターンに追加します。たとえば、 "%d%t%logger-%m%n%caller {2、WITH_CALLER_MARKER}"ここで、WITH_CALLER_MARKERは評価者を示します。この構成では、WITH_CALLER_MARKERエバリュエーターがtrueを返すと、3行の呼び出し元データが出力されます。

エバリュエーターは、logback.xml構成ファイルで次のように指定されます。

<evaluator name="WITH_CALLER_MARKER" 
           class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
  <marker>WITH_CALLER</marker>
</evaluator>

発信者情報の有効化は、「WITH_CALLER」マーカーを使用してログを記録するのと同じくらい簡単になりました。これが例です、

Marker withCallerMaker = MarkerFactory.getMarker("WITH_CALLER");
Logger logger = LoggerFactory.getLogger("some.name");
logger.warn(withCallerMarker, "Invalid value {}. Defaulting to UNKNOWN.", value);

すでにSLF4Jを使用しているので、ログバックへの移行は簡単です。log4j.propertiesファイルをlogback.xmlに変換し、slf4j-log4j12.jarを削除し、log4j.jarをlogback-*。jarに置き換えるだけで完了です。log4j.propertiesファイルをlogback.xmlに変換するツールもあります。

log4jで同様の機能を実現するには、はるかに多くの作業が必要になり、最終的な結果はそれほど便利ではなくなると思います。

于 2012-05-26T22:09:44.880 に答える