Muszę być głupi czy coś, ale wydaje mi się, że nie mogę używać sparametryzowanych metod rejestrowania SLF4J z varargs-utilizing. Przykład:Rejestrowanie sparametryzowane przez SLF4J przy użyciu metody 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);
}
}
}
Na sposobu rejestrowania, zaćmienie produkuje takie ostrzeżenie:
The method error(String, Object, Object) in the type Logger is not applicable for the arguments (String, int, long, int, Exception)
i nie skompilować.
Jednak jeśli zmienię wezwanie do rejestrowania:
logger.error("I wanna log {} and {} and {} with backtrace", new Object[]{x, y, 3, e});
To kompiluje i działa zgodnie z oczekiwaniami (zalogowaniu 3 „zmienne” i ślad stosu wyjątku).
Wersje bibliotek to: slf4j-api-1.7.5.jar, slf4j-log4j12-1.7.5.jar i log4j-1.2.14.jar, jeśli ma to znaczenie.
Gdyby ktoś zwrócił uwagę na niedociągnięcia moich umiejętności myślenia, byłoby to bardzo cenne!
Masz 3 zastępcze w swoim ciągiem, ale 4 argumenty - czy to celowo? – fge
Tak: http://slf4j.org/faq.html#paramException – Manjabes
Myślę, że [ta odpowiedź] (http://stackoverflow.com/a/7689819/1523342) wyjaśnia to bardzo ładnie. – mthmulders