如何将记录器包装在slf4j中?

Jea*_*les 7 java logging slf4j java.util.logging

是否可以将记录器包装为slf4j?

例如,在调试模式下,当我检查时org.slf4j.LoggerFactory.getLogger(loggerName),我可以看到记录器(这里java.util.logging):

java.util.logging记录器

我想做的事情如下:

// 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)); 
Run Code Online (Sandbox Code Playgroud)

Jea*_*les 8

我找到了使用反射的解决方案.在slf4j Logger中查找"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;
}
Run Code Online (Sandbox Code Playgroud)

致电:

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)
Run Code Online (Sandbox Code Playgroud)

但是使用slf4j API可能存在更好的解决方案?