최근에 저는 log4j2 로거를 사용하는 방법을 배우기로 결정했습니다. 필요한 jar 파일을 다운로드하고 라이브러리, xml 구성 파일을 만들어 사용해 보았습니다. 불행히도 콘솔 (Eclipse) 에서이 진술을 얻습니다.
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
이것은 내 테스트 클래스 코드입니다.
package log4j.test;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class Log4jTest
{
static final Logger logger = LogManager.getLogger(Logger.class.getName());
public static void main(String[] args) {
logger.trace("trace");
logger.debug("debug");
logger.info("info");
logger.warn("warn");
logger.error("error");
logger.fatal("fatal");
}
}
그리고 내 xml 구성 파일 :
<?xml version="1.0" encoding="UTF-8"?>
<Configuration package="log4j.test"
status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="log4j.test.Log4jTest" level="trace">
<AppenderRef ref="Console"/>
</Logger>
<Root level="trace">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
<Logger>
태그가 없는 xml , 패키지 사양 및 다양한 폴더 / 패키지 디렉토리에서도 시도했지만 도움이되지 않았습니다. 이제 내 log4j2.xml
파일은 Eclipse의 프로젝트 폴더에 직접 있습니다.
답변
이것은 maven 등이없는 간단한 일식 자바 프로젝트입니까? 이 경우 클래스 경로에서 log4j2.xml
파일 src
을 찾을 수 있도록 폴더 아래 에 파일 을 넣어야합니다 . maven을 사용하는 경우 아래에 src/main/resources
놓거나src/test/resources
답변
다음 솔루션 중 하나를 선택해야합니다.
- 프로젝트의 리소스 디렉터리에 log4j2.xml 파일을 저장하면 log4j가 클래스 경로 아래에서 파일을 찾습니다.
- 시스템 속성 -Dlog4j.configurationFile = file : /path/to/file/log4j2.xml 사용
답변
yaml로 log4j2를 구성하는 데 Apache Log4j2 Configuratoin 및 Apache Log4j2 Maven 문서를 따르고있었습니다 . 문서에 따라 다음과 같은 Maven 종속성이 필요합니다.
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.1</version>
</dependency>
과
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<version>2.8.6</version>
</dependency>
이것들을 추가하는 것만으로는 구성이 선택되지 않았고 항상 오류가 발생했습니다. 추가하여 디버깅 구성 방법은 -Dorg.apache.logging.log4j.simplelog.StatusLogger.level=TRACE
로그를 보는 데 도움이됩니다. 나중에 Maven을 사용하여 소스를 다운로드해야했고 디버깅은 log4j2의 종속 된 클래스를 이해하는 데 도움이되었습니다. 그들은 다음에 나열되어 있습니다 org.apache.logging.log4j.core.config.yaml.YamlConfigurationFactory
.
com.fasterxml.jackson.databind.ObjectMapper
com.fasterxml.jackson.databind.JsonNode
com.fasterxml.jackson.core.JsonParser
com.fasterxml.jackson.dataformat.yaml.YAMLFactory
에 대한 종속성 매핑을 추가 jackson-dataformat-yaml
하면 처음 두 클래스가 없습니다. 따라서 jackson-databind
yaml 구성이 작동하도록 종속성을 추가하십시오 .
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.6</version>
</dependency>
MVN RepositoryTest Dependencies
의 log4j-api
버전 항목 섹션을 참조하여 버전을 추가 할 수 있습니다 . 예를 들어 2.8.1 버전의 log4j-api의 경우이 링크를 참조 하여 버전을 찾으십시오 .jackson-databind
또한 아래 Java 코드를 사용하여 클래스 경로에서 클래스를 사용할 수 있는지 확인할 수 있습니다.
System.out.println(ClassLoader.getSystemResource("log4j2.yml")); //Check if file is available in CP
ClassLoader cl = Thread.currentThread().getContextClassLoader(); //Code as in log4j2 API. Version: 2.8.1
String [] classes = {"com.fasterxml.jackson.databind.ObjectMapper",
"com.fasterxml.jackson.databind.JsonNode",
"com.fasterxml.jackson.core.JsonParser",
"com.fasterxml.jackson.dataformat.yaml.YAMLFactory"};
for(String className : classes) {
cl.loadClass(className);
}
답변
Tomasz W가 작성한 것 외에도 응용 프로그램을 시작하여 설정을 사용할 수 있습니다.
-Dorg.apache.logging.log4j.simplelog.StatusLogger.level=TRACE
대부분의 구성 문제를 해결합니다.
자세한 내용은 Log4j2 FAQ : 구성을 디버그하려면 어떻게합니까? 를 참조하십시오 .
답변
Eclipse는 IDE를 강제로 새로 고칠 때까지 파일을 볼 수 없습니다. 그 기능! 따라서 프로젝트 전체에 파일을 배치 할 수 있으며 Eclipse는이를 완전히 무시하고 이러한 오류를 발생시킵니다. Eclipse 프로젝트보기에서 새로 고침을 누르면 작동합니다.
답변
제 경우에는 클래스 경로가 src 폴더로 설정되어 있어도 프로젝트의 bin 폴더에 넣어야했습니다. 이유는 모르겠지만 시도해 볼 가치가 있습니다.