Devo essere stupido o qualcosa del genere, ma sembra che non sia in grado di utilizzare i metodi di registrazione parametrizzati varargs-utilizing di SLF4J. Un esempio:Registrazione parametrizzata SLF4J utilizzando il metodo varargs
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);
}
}
}
Sul metodo di registrazione, eclisse produce un avvertimento:
The method error(String, Object, Object) in the type Logger is not applicable for the arguments (String, int, long, int, Exception)
e fallisce la compilazione.
Tuttavia, se cambio la chiamata di registrazione a:
logger.error("I wanna log {} and {} and {} with backtrace", new Object[]{x, y, 3, e});
Si compila e viene eseguito come previsto (la registrazione 3 "variabili" e la traccia dello stack eccezione).
Le versioni della libreria sono: slf4j-api-1.7.5.jar, slf4j-log4j12-1.7.5.jar e log4j-1.2.14.jar, se fa alcuna differenza.
Se qualcuno sottolinea le carenze delle mie capacità di pensiero, sarebbe molto apprezzato!
Hai 3 segnaposto nella stringa, ma 4 argomenti - è di proposito? – fge
Sì: http://slf4j.org/faq.html#paramException – Manjabes
Penso che [questa risposta] (http://stackoverflow.com/a/7689819/1523342) lo spieghi molto bene. – mthmulders