2015-02-05 1 views
9

Log4j2는 설명서의 상태와 마찬가지로 루트 클래스 경로에있는 log4j2.xml 구성 파일을 통해 Spring Boot와 잘 작동합니다.Java Spring Boot에서 log4j2.xml의 기본 위치를 변경하려면 어떻게해야합니까?

이 파일을 다른 위치로 옮길 때 시작시 새 위치를 Spring에 전달할 수 없습니다. the documentation에서 :

다양한 로깅 시스템이 지정한 위치에 적합한 구성 클래스 경로의 루트 파일 또는 제공 하여 클래스 경로에 적절한 라이브러리를 포함하여 활성화하고, 또한 정의 될 수있다 봄 환경 속성에 의해 logging.config.

나는 자바 시스템 속성

java -jar -Dlogging.config="classpath:/config/log4j2.xml" target/app.jar 

에 새 위치를 설정하거나 관련 특성

logging.config=classpath:/config/log4j2.xml 

을 포함하는 외부 application.properties를 사용하여 시도하지만 정기적으로 다음과 같은 오류 메시지로 인사하고 . 로깅은 이미 초기화 된 후에 이들이 판독되는 것과 Spring reference documentation에서 규정

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console. 
+0

'/ config'가 클래스 경로에 있는지 확인해 주시겠습니까?maven 기반의 프로젝트를 사용하고 있다면 xml 파일을'src/main/resources'에 넣으십시오. – Mithun

+0

'config' 폴더 (package)가 classpath에 있고, 이미'application.yml'을 포함하고 있습니다. 응용 프로그램에서 성공적으로 사용되었습니다. – micpalmia

+0

xml 파일을'src/main/resources'에 넣고 문제의 범위를 좁힐 수 있습니까? – Mithun

답변

14

logging.config 속성은 애플리케이션 특성 간의 설정할 수 없다.

java -Dlogging.config='/path/to/log4j2.xml' -jar app-current.jar 
1

micpalmia의 응답이 올바른 절대적이다

용액 외부 로깅 구성이 방법은 경로를 제공하는 것이다.

구성 파일을 클래스 경로 외부에 배치해야하는데 구성 파일을 매개 변수로 전달하고 싶지 않았습니다. 그래서 클래스 패스 자원에 매우 간단한 로깅 구성을 넣고과 같이, 시작에 로그인 스프링 부팅 응용 프로그램의 재구성을했다 : 전체 응용 프로그램의 부팅 프로세스는 다음과 같이 기록되지 않습니다 :

@SpringBootApplication 
public class Application implements CommandLineRunner { 
    public static void main(String[] args) throws Exception { 
     SpringApplication.run(Application.class, args); 
    } 

    @Override 
    public void run(String... param) throws UnsupportedEncodingException { 
     Configurator.initialize(null, "config/log4j2.xml"); 
     // ... 
    } 
} 

이러한 접근 방식은 상당한 단점이있다 외부 구성. 그러나 일단 사용자 정의 코드가 실행되면 로거는 의도 한대로 작동합니다. 그렇지 않을 수도 있지만, 나는 이것이 내가 살 수있는 타협이라고 생각합니다.

1

내 프로젝트에서 동일한 문제가 있습니다. log4j2.xml 외에도 클래스 경로에 다른 설정 파일이 필요합니다.

Soluation 1 : 여기에 작동 내 2 개 솔루션입니다 해결 방법 2

java -classpath SpringBootProject.jar;./config org.springframework.boot.loader.JarLauncher 

org.springframework.boot.loader.JarLauncher

봄 부팅 응용 프로그램을 시작하십시오 './config'클래스 경로 항목을 쓰기 항아리에있는 MANIFEST.MF

<build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-jar-plugin</artifactId> 
     <configuration> 
      <archive> 
      <manifestEntries> 
       <Class-Path>./config/</Class-Path> 
      </manifestEntries> 
      </archive> 
     </configuration> 
     </plugin> 
     <plugin> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-maven-plugin</artifactId> 
     <version>1.5.3.RELEASE</version> 
     <executions> 
      <execution> 
      <goals> 
       <goal>repackage</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build>