Java Spring Boot에서 log4j2.xml의 기본 위치를 변경하려면 어떻게 해야 합니까?
Log4j2는 Spring Boot에서 정상적으로 동작하고 있습니다.log4j2.xml
매뉴얼에 기재되어 있는 대로 루트 클래스 패스에 있는 컨피규레이션파일을 참조해 주세요.
그러나 이 파일을 다른 위치로 이동하려고 할 때 시작 시 새 위치를 스프링으로 전달할 수 없습니다.매뉴얼에서 다음 항목을 참조하십시오.
다양한 로깅시스템은 클래스 패스에 적절한 라이브러리를 포함시킴으로써 활성화 할 수 있습니다.클래스 패스의 루트 또는 Spring Environment 속성으로 지정된 위치에 적절한 설정 파일을 제공함으로써 더욱 커스터마이즈 할 수 있습니다.
자바 시스템 속성으로 새 위치를 설정해 보았습니다.
java -jar -Dlogging.config="classpath:/config/log4j2.xml" target/app.jar
또는 외장 장치를 사용하여application.properties
관련 특성을 포함하는 모습
logging.config=classpath:/config/log4j2.xml
그러나 다음과 같은 오류 메시지가 정기적으로 표시됩니다.
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
스프링 레퍼런스 매뉴얼에 기재되어 있는 바와 같이logging.config
응용 프로그램 속성 간에 속성을 설정할 수 없습니다. 이는 로깅이 이미 초기화된 후에 읽히기 때문입니다.
해결책은 다음과 같이 외부 로깅 설정에 대한 경로를 제공하는 것입니다.
java -Dlogging.config='/path/to/log4j2.xml' -jar app-current.jar
여기 log4j2 매뉴얼에서 설명한 바와 같이 다음과 같은 파일을 포함할 수 있습니다.log4j2.component.properties
리소스 폴더(또는 클래스 경로의 임의 위치) 및 파일 내부에 다음과 같이 파일 위치 이름(또는 새 파일 이름)을 지정할 수 있습니다.
log4j.configurationFile=path/to/log4j2.xml
또는
log4j.configurationFile=classpath:log4j2-custom.xml (if the file is on the classpath)
또는 를 사용하여 컨피규레이션파일 위치를 지정할 수도 있습니다.context-param
의 분야web.xml
여기서 언급했듯이, 나는 그 옵션을 시도해 본 적이 없다.
(Spring Boot에서도 사용 가능)
마이크로팔미아의 답은 전적으로 옳다.
컨피규레이션파일을 파라미터로 전달하고 싶지 않은 classpath 외부에 설정을 배치해야 했습니다.따라서 클래스 패스리소스에 매우 간단한 로깅 설정을 삽입하고 시작 시 스프링 부트애플리케이션이 로깅을 재구성하도록 했습니다.
@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");
// ...
}
}
이 방법에는 다음과 같은 중대한 단점이 있습니다.애플리케이션 기동 프로세스 전체가 외부 설정대로 로그에 기록되지 않습니다.그러나 커스텀 코드가 실행되면 로거는 의도한 대로 작동합니다.넌 못 믿겠지만 난 이게 내가 감수할 수 있는 타협이라고 생각해.
속성 파일의 경우:
java -Dlog4j.configuration=file:/path/to/log4j.properties -jar app.jar
To 명령줄은 Spring Boot 2로 동작합니다.경로 앞에 파일을 추가하는 것을 잊지 마십시오.
제 프로젝트에서도 같은 문제가 있습니다.log4j2.xml 외에 클래스 경로에 다른 설정 파일도 필요합니다.기능하는 2가지 솔루션은 다음과 같습니다.
솔루션 1 : org.springframework.boot.loader를 사용하여 스프링 부트 응용 프로그램을 시작합니다.Jar Launcher
java -classpath SpringBootProject.jar;./config org.springframework.boot.loader.JarLauncher
해결책 2: '.config' 클래스 경로 항목을 매니페스트에 기록합니다.병 속의 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>
로그 파일의 커스텀 패스를 설정하거나 기존 파일 패스를 변경하는 솔루션이 있습니다.log4j2.xml 파일을 설정한 경우 파일을 열고 설정 로그 파일 경로를 위해 한 줄 변경해야 하는 위치를 확인합니다.
기본 이름이 아닌 log4j2.xml 파일의 이름을 바꾸려고 하면파일을 로드하기 위해.application.properties 파일의 add properties 속성 아래에 있는 스프링 부트 어플리케이션의 경우 이 방법은 유효합니다.
logging.config=classpath:logfilename.xml
언급URL : https://stackoverflow.com/questions/28349309/how-can-i-change-the-default-location-of-log4j2-xml-in-java-spring-boot
'sourcecode' 카테고리의 다른 글
에서 C# 개체를 JSON 문자열로 변환하려면 어떻게 해야 합니까?인터넷? (0) | 2023.03.29 |
---|---|
React + Redux - 폼 컴포넌트에서 CRUD를 처리하는 가장 좋은 방법은 무엇입니까? (0) | 2023.03.29 |
C#의 JSON 해석 (0) | 2023.03.19 |
joke가 구현되지 않았습니다.경보() (0) | 2023.03.19 |
module.config 내부 값의 AngularJS 의존성 주입 (0) | 2023.03.19 |