24

このロットを取り除きたい...

public void info(String msg);
public void info(String format, Object arg);
public void info(String format, Object arg1, Object arg2);
public void info(String format, Object[] argArray);

...そしてこれと交換してください...

public void info(String format, Object ... args);

...ログに記録する引数の数に応じてログの構文を変更する必要がないようにします。たくさんの議論と回避策があるようですが、それはどこにありますか?または、slf4jであるラッパーをラップする必要がありますか?

4

7 に答える 7

14

本当の問題は、「なぜ 5 未満の jdk をサポートしなければならないのか」ということです。古いバージョンの Java を使用している場合は、古い API を使用してください。それはとても簡単です。これを現在の Java の世界にうまく適合させてみませんか? つまり、Sun/Oracle からのサポート契約がなければ、JDK 5 はサポートされません。この場合、下位互換性は冗談です。

于 2010-06-07T17:16:52.920 に答える
11

これは最終的に解決されます。SLF4J 1.7.0 では JDK 1.5 が必要になり、下位互換性のある varargs メソッドを備えています。

于 2012-09-10T11:07:50.230 に答える
7

いいえ。

100% の下位互換性を維持しながら正しく行う方法については、まだ未解決の問題があります。

http://bugzilla.slf4j.org/show_bug.cgi?id=31で議論を参照してください。

于 2009-12-23T15:27:29.360 に答える
4

LoggerのSLF4Jjavadocを読むと、単純な答えはノーのように見えます。私が読んだことから、彼らは古いバージョンのJDKとの互換性を維持したいと考えています。

SLF4Jの使用に実際に縛られていない場合は、 log5jがオプションである可能性がありますか?

于 2009-12-23T14:35:41.903 に答える
1

SLF4J で可変引数を使用する解決策があります。

SLF4J を拡張して varargs ロギング メソッドを提供する Lumberjack というオープン ソース プロジェクトがあります。拡張は非常に自然で、SLF4J を使用する場合と比べて違いは感じられません (これは、Lumberjack が SLF4J のラッパーにすぎないため、すべての機能が SLF4J によって引き続き提供されるためです)。

使用例:

JackLogger logger = JackLoggerFactory.getLogger(LoggerFactory.getLogger(Weather.class));

logger.info("Hello {}! The current time is {}:{}:{}, and after {} hours the weather will be {}.", "Jack", 13, 30, 0, 5, "sunny");

木こりのウェブサイト: https://github.com/bogdanu/lumberjack

Lumberjack ライセンスは、SLF4J のライセンスである MIT ライセンスと同じであるため、追加のライセンス制限はありません。

免責事項:私はLumberjackの作者です

于 2012-05-08T06:39:30.063 に答える
0

便利なvararg インターフェイスで SLF4J ロギングをラップするjcabi-logツールキットを試してください。

于 2012-05-14T06:42:26.160 に答える