우리는 java-ee 응용 프로그램에서 Log4j2를 사용합니다. 로깅이 SLF4J에 대해 프로그래밍되는 라이브러리를 사용합니다. 이 라이브러리에는 원하지 않는 많은 것들을 기록하는 클래스가 있습니다 -> 그래서이 Logger의 LogLevel을 OFF로 설정하고 싶습니다.라이브러리의 slf4j가 내 log4j2 구성을 무시하는 것 같습니다
내 log4j2.xml은 다음과 같습니다
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="trace" shutdownHook="disable">
<Appenders>
<Console name="ConsoleAppender" target="SYSTEM_OUT" ignoreExceptions="false" >
<PatternLayout pattern="%d{ISO8601} %d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<JDBC name="DatabaseAppender" tableName="logentry" ignoreExceptions="false" >
<ConnectionFactory class="xx.xx.xx.xx.LoggingConnectionFactory" method="getDatabaseConnection" />
<Column name="eventDate" isEventTimestamp="true" />
<Column name="level" pattern="%level" isUnicode="false"/>
<Column name="logger" pattern="%logger" isUnicode="false"/>
<Column name="message" pattern="%message" isUnicode="false"/>
<Column name="exception" pattern="%throwable{50}" isUnicode="false"/>
</JDBC>
</Appenders>
<Loggers>
<Logger name="net.rubyeye.xmemcached.transcoders.BaseSerializingTranscoder" level="off" additivity="false">
<AppenderRef ref="ConsoleAppender"/>
</Logger>
<Root level="INFO">
<AppenderRef ref="DatabaseAppender"/>
<AppenderRef ref="ConsoleAppender"/>
</Root>
</Loggers>
</Configuration>
그러나 BaseSerializingTranscoder
은 여전히 오류를 기록합니다. 간단한 테스트를 수행하고 BaseSerializingTranscoder에서 찾은 로그 코드를 테스트 함수에 배치하면 org.slf4j.Logger.LoggerFactory (라이브러리에서 수행되는 작업)에서 검색 한 로거가 logger1의
import net.rubyeye.xmemcached.transcoders.BaseSerializingTranscoder;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.slf4j.LoggerFactory;
org.slf4j.Logger logger1 = LoggerFactory.getLogger(BaseSerializingTranscoder.class);
logger1.error("log test the same way as in library");
Logger logger2 = LogManager.getLogger(BaseSerializingTranscoder.class);
logger2.error("log test");
출력은 볼, 내가 제거하고 싶었 : (내 구성이 올바르게 적용됩니다) org.apache.logging.log4j.LogManager을 통해 로거를 검색 할 수 있습니다. 뭐가 잘못 되었 니?
편집
Wildfly 10.1을 사용합니다. 나는 똑같은 문제가있는 최소한의 예를 만들 수 있었다.
pom.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>test</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.jboss.spec</groupId>
<artifactId>jboss-javaee-all-7.0</artifactId>
<version>1.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.9.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.9.1</version>
</dependency>
</dependencies>
</project>
log4j2.xml :
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn">
<Appenders>
<Console name="consoleAppender" target="SYSTEM_OUT">
<PatternLayout pattern="%d %p %c [%t] %m%n" />
</Console>
</Appenders>
<Loggers>
<Logger name="blah" level="off" additivity="false">
<AppenderRef ref="consoleAppender" />
</Logger>
<Root level="info">
<AppenderRef ref="consoleAppender" />
</Root>
</Loggers>
</Configuration>
Service.java :
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.ejb.Startup;
@Singleton
@Startup
public class Service {
private static final Logger loggerBlah = LoggerFactory.getLogger("blah");
private static final Logger logger = LoggerFactory.getLogger(Service.class);
@PostConstruct
private void startup() {
logger.info("test1");
logger.error("test2");
loggerBlah.info("test3");
loggerBlah.error("test4");
}
}
출력 :
21:13:11,641 INFO [Service] (ServerService Thread Pool -- 40) test1
21:13:11,641 ERROR [Service] (ServerService Thread Pool -- 40) test2
21:13:11,641 INFO [blah] (ServerService Thread Pool -- 40) test3
21:13:11,641 ERROR [blah] (ServerService Thread Pool -- 40) test4
,174,
test3 및 test4를 로깅해서는 안됩니다! 무엇이 잘못 되었나요?
어떤 서블릿 API 버전을 사용하고 있는가? –
지금 당신이 할 수있는 최선의 방법은 간단한 웹 애플리케이션을 만드는 것입니다 (아무것도 시작하지 말고 새 앱을 빌드하십시오). 그리고 문제를 재현 해보십시오. 다시 작성할 수 있으면 문제가있는 위치를 알 수 있습니다. 필자는 환경에 대한 세부 사항이나 코드 작성 및 실행 방법에 대한 세부 정보를 갖고 있지 않습니다. 일반적으로 stackoverflow에서 우리는 질문 작성자가 [최소, 완전하고 검증 가능한 예제] (http://stackoverflow.com/help/mcve)를 제공하므로 지금 작업해야한다고 생각합니다. –
EJB를 사용하여 최소한의 예제를 만들고이를 Wildfly 10.1에 배포했습니다. -> 정확히 내 문제. 이 예제에서 모든 파일을 보여주는 질문을 업데이트했습니다. http://pubstore.webhop.org/misc/issues/java/logging1.zip – badera