2014-01-24 5 views
5

Ist es möglich, den Logger von slf4j verpackt zu bekommen?Wie bekomme ich den Logger in slf4j verpackt?

Zum Beispiel im Debug-Modus, wenn ich prüfen org.slf4j.LoggerFactory.getLogger(loggerName), kann ich den Logger sehen (hier java.util.logging):

java.util.logging Logger

ich so etwas tun wollen:

// Get the real logger, cast in java.util.logging 
java.util.logging.Logger myLogger = LoggerFactory.getLogger(loggerName))...; 
// Use the java.util.logging methods 
myLogger.setLevel(Level.parse(level)); 

Antwort

3

Ich habe eine Lösung gefunden, die Reflexion verwendet. Suche nach dem "Logger" -Feld im slf4j Logger.

private <T> T getLogger(final String loggerName, final Class<T> loggerClass) { 
    final org.slf4j.Logger logger = LoggerFactory.getLogger(loggerName); 
    try { 
     final Class<? extends org.slf4j.Logger> loggerIntrospected = logger.getClass(); 
     final Field fields[] = loggerIntrospected.getDeclaredFields(); 
     for (int i = 0; i < fields.length; i++) { 
      final String fieldName = fields[i].getName(); 
      if (fieldName.equals("logger")) { 
       fields[i].setAccessible(true); 
       return loggerClass.cast(fields[i].get("logger")); 
      } 
     } 
    } catch (final Exception e) { 
     logger.error(e.getMessage()); 
    } 
    return null; 
} 

Aufruf mit:

java.util.logging.Logger myLogger = getLogger(loggerName, java.util.logging.Logger.class) 
// or 
org.apache.log4j.Logger myLogger = getLogger(loggerName, org.apache.log4j.Logger.class) 

Aber vielleicht gibt es eine bessere Lösung, um die slf4j API?

+1

Danke für die Lösung! Ich musste die Anführungszeichen von "Logger" in der Return-Zeile entfernen, also sollte "get" die Logger-Instanz anstelle einer Zeichenkette nehmen. –

Verwandte Themen