如何使记录器包裹在slf4j中? [英] How to get the logger wrapped in slf4j?
本文介绍了如何使记录器包裹在slf4j中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
是否有可能使记录器被slf4j包装?
Is it possible to get the logger wrapped by slf4j ?
例如,在调试模式下,当我检查 org.slf4j.LoggerFactory.getLogger(loggerName)
时,我可以看到记录器(此处为 java.util.logging
):
For example, in debug mode, when I inspect org.slf4j.LoggerFactory.getLogger(loggerName)
, I can see the logger (here, 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 Logger中寻找"logger"字段.
I've found a solution using reflection. Looking for the "logger" field in the 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;
}
致电:
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可能存在更好的解决方案吗?
But maybe exists a better solution using the slf4j API ?
这篇关于如何使记录器包裹在slf4j中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文