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 (로그 백이 사용 된 경우에만)를 시도하고 jdk로 폴백합니다.
나는 다음 slf4j
과 함께 사용 합니다 logback-classic
.
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.13</version>
<scope>${logging.scope}</scope>
</dependency>
그리고 모두 잘 작동합니다!
업데이트 일부 사용자는 매우 주요 App.java에서 사용합니다.
static { //runs when the main class is loaded.
System.setProperty("org.jboss.logging.provider", "slf4j");
}
그러나 컨테이너 기반 솔루션의 경우 이것은 작동하지 않습니다.
업데이트 2 Log4j를 SLF4J로 관리한다고 생각하는 사람들 jboss-logging
은 정확히 그렇지 않습니다. jboss-logging
SLF4J없이 Log4j를 직접 사용합니다!