source

Log4j2 구성 - log4j2 구성 파일을 찾을 수 없습니다.

gigabyte 2022. 9. 12. 11:43
반응형

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

다음 솔루션 중 하나를 선택해야 합니다.

  1. log4j2.xml 파일을 프로젝트의 리소스 디렉토리에 저장하여 log4j가 클래스 경로 아래의 파일을 찾습니다.
  2. 시스템 속성 -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-databindyaml 설정을 유효하게 하기 위한 의존관계:

<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

반응형