Log4j2 구성 - log4j2 구성 파일을 찾을 수 없습니다.
최근 log4j2 logger 사용법을 배우기로 했습니다.필요한 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>
xml도 사용해 보았습니다만,<Logger>
태그, 패키지 사양, 다양한 폴더/디렉토리에 포함되지만 도움이 되지 않습니다.이제 나의log4j2.xml
파일은 일식 시 프로젝트 폴더에 직접 있습니다.
이것은 maven 등이 없는 단순한 이클립스 자바 프로젝트입니까?그 경우, 당신은 그 정보를log4j2.xml
로 줄서다.src
클래스 경로에서 찾을 수 있는 폴더입니다.메이븐을 사용하시면 밑에 넣어주세요.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>
버전을 추가하려면 , 를 참조해 주세요.Test Dependencies
의 단면log4j-api
버전 항목을 선택합니다.예를 들어 log4j-api 2.8.1 버전의 경우 이 링크를 참조하여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);
}
이클립스는 IDE를 강제로 새로 고칠 때까지 파일을 볼 수 없습니다.특집입니다!이 파일을 프로젝트 전체에 배치하면 이클립스는 이 파일을 완전히 무시하고 오류를 발생시킵니다.Eclipse 프로젝트 뷰에서 새로 고침을 누르면 작동합니다.
Tomasz W가 작성한 것 외에, 애플리케이션을 기동하면, 다음의 설정을 사용할 수 있습니다.
-Dorg.apache.logging.log4j.simplelog.StatusLogger.level=TRACE
설정 문제의 대부분을 취득합니다.
자세한 내용은 Log4j2 FAQ: How do I debug my configuration을 참조하십시오.
제 경우 클래스 패스가 src 폴더로 설정되어 있어도 프로젝트의 bin 폴더에 넣어야 했습니다.이유는 모르겠지만 시도해 볼 만해요.
log4j-test.xml => 컨피규레이션파일의 이름(/test/filename에 배치되어 있는 경우
@TestPropertySource(properties = {
"log4j.configurationFile","log4j-test.xml"
})
@CucumberContextConfiguration
@ContextConfiguration(classes = TestConfiguration.class)
public class Steps{
private Logger log = LogManager.getLogger(Steps.class);
//implementation
}
언급URL : https://stackoverflow.com/questions/25487116/log4j2-configuration-no-log4j2-configuration-file-found
'source' 카테고리의 다른 글
자바 추상 인터페이스 (0) | 2022.09.13 |
---|---|
dd-mm-yyy 문자열을 최신 상태로 변환합니다. (0) | 2022.09.13 |
maria db를 사용한 지리 공간 (0) | 2022.09.12 |
Python 3: Unbound Local Error: 할당 전에 참조된 로컬 변수 (0) | 2022.09.12 |
Python에서 다중 공백을 단일 공백으로 대체 (0) | 2022.09.12 |