Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将记录器包装在slf4j中?_Java_Logging_Slf4j_Java.util.logging - Fatal编程技术网

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

Java 如何将记录器包装在slf4j中?,java,logging,slf4j,java.util.logging,Java,Logging,Slf4j,Java.util.logging,是否可以使用slf4j包装记录器 例如,在调试模式下,当我检查org.slf4j.LoggerFactory.getLogger(loggerName)时,我可以看到记录器(这里,java.util.logging): 我想做一些类似的事情: // Get the real logger, cast in java.util.logging java.util.logging.Logger myLogger = LoggerFactory.getLogger(loggerName))...;

是否可以使用slf4j包装记录器

例如,在调试模式下,当我检查
org.slf4j.LoggerFactory.getLogger(loggerName)
时,我可以看到记录器(这里,
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)); 

我找到了一个使用反射的解决方案。 在slf4j记录器中查找“记录器”字段

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;
}

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

为了找到slf4j使用的实现(例如,类似于spring boot中的logback/log4j),您可以使用以下方法提取该信息

System.out.println(StaticLoggerBinder.getSingleton().getLoggerFactory());
输出

ch.qos.logback.classic.LoggerContext[default]

谢谢你的解决方案!我必须删除返回行中“logger”的引号,因此“get”应该使用logger实例而不是字符串。
ch.qos.logback.classic.LoggerContext[default]