私は愚かか何かに違いないが、SLF4Jの varargs-utilizing パラメーター化されたロギングメソッドを使用できないようです。例:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LoggingTest {
@Test
public void loggingTest() {
Logger logger = LoggerFactory.getLogger(this.getClass());
int x = 0xdeadbeef;
long y = 0xdeadbeef;
try {
throw new Exception("This is a mighty exception!");
} catch(Exception e) {
logger.error("I wanna log {} and {} and {} with backtrace", x, y, 3, e);
}
}
}
ロギングメソッドで、Eclipseは次のような警告を生成します。
The method error(String, Object, Object) in the type Logger is not applicable for the arguments (String, int, long, int, Exception)
コンパイルに失敗します。
ただし、ロギング呼び出しを次のように変更すると、次のようになります。
logger.error("I wanna log {} and {} and {} with backtrace", new Object[]{x, y, 3, e});
期待どおりにコンパイルおよび実行されます(3つの「変数」と例外スタックトレースをログに記録します)。
ライブラリのバージョンは、slf4j-api-1.7.5.jar、slf4j-log4j12-1.7.5.jar、およびlog4j-1.2.14.jarです(違いがある場合)。
誰かが私の思考能力の欠点を指摘してくれるなら、それは非常にありがたいです!
私はいくつかの追加の調査を行いました、そしてコンパイルエラーを取得する唯一の方法は
logger.error("I wanna log {} and {} and {} with backtrace", x, y, 3, e);
のためではありません
logger.error("I wanna log {} and {} and {} with backtrace", new Object[]{x, y, 3, e});
1.7より前のバージョンのSLF4JAPIを使用することです(varargsのサポートが導入されました)。次のステートメントが当てはまらない場所を見つけるには、おそらくクラスパス(またはサーバーランタイム?)を掘り下げる必要があります。
ライブラリのバージョンは、slf4j-api-1.7.5.jar、slf4j-log4j12-1.7.5.jar、およびlog4j-1.2.14.jarです(違いがある場合)。
(それは確かにあなたが観察した違いを正確にもたらすからです)