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


91

최근에 저는 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의 프로젝트 폴더에 직접 있습니다.


2
문서의 SAIS, 그냥 클래스 패스에한다. 맞나요?
Fildor 2014-08-25

네, 놓쳤습니다. 어리석은 질문과 감사를 드려 죄송합니다 :)
Qbisiek 2014-08-25

답변:


139

이것은 maven 등이없는 간단한 일식 자바 프로젝트입니까? 이 경우 클래스 경로에서 log4j2.xml파일 src을 찾을 수 있도록 폴더 아래 에 파일 을 넣어야합니다 . maven을 사용하는 경우 아래에 src/main/resources놓거나src/test/resources


4
내 영웅! 클래스 경로에 구성 파일이 있었지만 (내 생각에) src 폴더에는 없었습니다. 나는 그것을 거기로 옮겼고 지금 작동하고 있습니다!
Shadoninja

Maven 프로젝트로 구성하는 방법은 무엇입니까? (내가 작업 할 클래스 경로 아래에 'log4j2.xml'을 넣으면 내가 작동 할 것이라고 생각하기 때문에 maven 방식처럼), 팁에 감사드립니다 :)
Enrique San Martín

log4j2.xml은 내 src (maven없는 JavaFX 프로젝트)에 있지만 찾을 수 없습니다.이 soooo 복잡합니까?!?! :(
Ewoks

2
대한 sbt(가) log4j2.xml로 전환 src/main/resources뿐만 아니라.
Akavall 2017 년

나는이 파일 log4j2.xml 찾을 수 없습니다
Karthiga

32

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

  1. 프로젝트의 리소스 디렉터리에 log4j2.xml 파일을 저장하면 log4j가 클래스 경로 아래에서 파일을 찾습니다.
  2. 시스템 속성 -Dlog4j.configurationFile = file : /path/to/file/log4j2.xml 사용

1
-Dlog4j.configurationFile내가 작업중인 프로젝트가 Maven 기반이 아니기 때문에 필요한 것입니다. 최고
김치 남자

15

yaml로 log4j2를 구성하는 데 Apache Log4j2 ConfiguratoinApache 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>

MVN RepositoryTest Dependencieslog4j-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);
 }


3

Eclipse는 IDE를 강제로 새로 고칠 때까지 파일을 볼 수 없습니다. 그 기능! 따라서 프로젝트 전체에 파일을 배치 할 수 있으며 Eclipse는이를 완전히 무시하고 이러한 오류를 발생시킵니다. Eclipse 프로젝트보기에서 새로 고침을 누르면 작동합니다.


0

제 경우에는 클래스 경로가 src 폴더로 설정되어 있어도 프로젝트의 bin 폴더에 넣어야했습니다. 이유는 모르겠지만 시도해 볼 가치가 있습니다.


이는 프로젝트가 구성을 포함하는 폴더가 리소스 폴더임을 인식하지 못하므로 빌드의 일부로 파일을 자동으로 복사하지 않음을 나타냅니다. 결국에는 bin 폴더에 복사되지 않는 소스를 변경하고 변경 사항이 작동하지 않는 이유를 궁금해하게 될 것이기 때문에 더 자세히 살펴 보는 것이 좋습니다.
Sarah Phillips
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.