sourcecode

Java Spring Boot에서 log4j2.xml의 기본 위치를 변경하려면 어떻게 해야 합니까?

codebag 2023. 3. 29. 21:26
반응형

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

반응형