ไปที่https://github.com/jboss-logging/jboss-logging/blob/master/src/main/java/org/jboss/logging/LoggerProviders.java :
static final String LOGGING_PROVIDER_KEY = "org.jboss.logging.provider";
private static LoggerProvider findProvider() {
// Since the impl classes refer to the back-end frameworks directly, if this classloader can't find the target
// log classes, then it doesn't really matter if they're possibly available from the TCCL because we won't be
// able to find it anyway
final ClassLoader cl = LoggerProviders.class.getClassLoader();
try {
// Check the system property
final String loggerProvider = AccessController.doPrivileged(new PrivilegedAction<String>() {
public String run() {
return System.getProperty(LOGGING_PROVIDER_KEY);
}
});
if (loggerProvider != null) {
if ("jboss".equalsIgnoreCase(loggerProvider)) {
return tryJBossLogManager(cl);
} else if ("jdk".equalsIgnoreCase(loggerProvider)) {
return tryJDK();
} else if ("log4j".equalsIgnoreCase(loggerProvider)) {
return tryLog4j(cl);
} else if ("slf4j".equalsIgnoreCase(loggerProvider)) {
return trySlf4j();
}
}
} catch (Throwable t) {
}
try {
return tryJBossLogManager(cl);
} catch (Throwable t) {
// nope...
}
try {
return tryLog4j(cl);
} catch (Throwable t) {
// nope...
}
try {
// only use slf4j if Logback is in use
Class.forName("ch.qos.logback.classic.Logger", false, cl);
return trySlf4j();
} catch (Throwable t) {
// nope...
}
return tryJDK();
}
ดังนั้นค่าที่เป็นไปได้คือ:org.jboss.logging.provider
, , ,jboss
jdk
log4j
slf4j
หากคุณไม่ได้ตั้งค่า org.jboss.logging.provider
ให้ลองใช้ jboss จากนั้น log4j แล้วก็ slf4j (เฉพาะเมื่อใช้ logback) และทางเลือกกลับเป็น jdk
ฉันใช้slf4j
กับlogback-classic
:
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.13</version>
<scope>${logging.scope}</scope>
</dependency>
และทำงานได้ดี!
UPDATEผู้ใช้บางคนใช้ใน App.java หลัก ๆ :
static { //runs when the main class is loaded.
System.setProperty("org.jboss.logging.provider", "slf4j");
}
แต่สำหรับโซลูชันที่ใช้คอนเทนเนอร์จะไม่ได้ผล
UPDATE 2ผู้ที่คิดว่าตัวเองจัดการ Log4j กับ SLF4J jboss-logging
นั้นไม่ถูกต้อง jboss-logging
ใช้ Log4j โดยตรงโดยไม่ใช้ SLF4J!