2013-07-18 17 views
12

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!

+0

Masz 3 zastępcze w swoim ciągiem, ale 4 argumenty - czy to celowo? – fge

+1

Tak: http://slf4j.org/faq.html#paramException – Manjabes

+0

Myślę, że [ta odpowiedź] (http://stackoverflow.com/a/7689819/1523342) wyjaśnia to bardzo ładnie. – mthmulders

Odpowiedz

20

Zrobiłem pewne dodatkowe dochodzenie, a jedyny sposób, aby dostać się błąd kompilacji dla

logger.error("I wanna log {} and {} and {} with backtrace", x, y, 3, e); 

a nie dla

logger.error("I wanna log {} and {} and {} with backtrace", new Object[]{x, y, 3, e}); 

jest użycie wersji slf4j API przed 1,7 (w którym wprowadzono obsługę varargs). Prawdopodobnie trzeba kopać w ścieżce klas (lub starcie serwera?), Aby dowiedzieć się, gdzie się następujące stwierdzenie nie jest prawdziwe:

wersje bibliotek są: slf4j-api-1.7.5.jar, slf4j-log4j12- 1.7.5.jar i log4j-1.2.14.jar, jeśli to robi jakąkolwiek różnicę.

(bo to na pewno sprawia, że ​​dokładnie różnicę które zostały zaobserwowane)

Powiązane problemy