java - 如何让记录器包裹在 slf4j 中?

标签 java logging slf4j java.util.logging

是否有可能让 slf4j 包装记录器?

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

java.util.logging Logger

我想做这样的事情:

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

调用方式:

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)

但也许存在使用 slf4j API 的更好解决方案?

关于java - 如何让记录器包裹在 slf4j 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21329953/

相关文章:

java - 可以从 vxml 或 ccxml (Voximal) 播放音频流(PCM 流 8000)

python - 如何在嵌入式 python 解释器中查看日志输出?

Mysql日志表架构

linux - 存储一天的应用程序日志

java - LogBack 使用 MessageFormat

c# - .NET 世界是否有日志外观?

java - Spring Boot 中 logback 中的 OWSAP ESAPI 日志记录支持

java - 在 AsyncTack 中使用 ProgressDialog 从扩展 Application 的类中调用

java - 如何在循环内增加数组的大小

java - 为什么从对话框 fragment 运行时列表 fragment 上的 getActivity() 不起作用