我找到了使用反射的解決方案。 尋找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更好的解決方案?
感謝您的解決方案!我不得不在返回行中刪除「記錄器」的引號,所以「get」應該採用記錄器實例而不是字符串。 –