programing

Spring Boot, logback 및 logging.config 속성

cafebook 2023. 4. 3. 21:44
반응형

Spring Boot, logback 및 logging.config 속성

로그백 라이브러리를 사용하여 Spring Boot 프로젝트에서 로깅을 구현하고 있습니다.스프링 프로파일(속성)에 따라 다른 로깅 설정 파일을 로드하고 싶다.spring.pofiles.active) 3개의 파일이 있습니다.

  • logback-dev.xml
  • logback-inte.xml
  • logback-module.xml

Spring Boot 버전 1.2.2를 사용하고 있습니다.풀어주다.


Spring Boot 매뉴얼을 참조해 주십시오.

다양한 로깅 시스템은 클래스 패스에 적절한 라이브러리를 포함하여 활성화할 수 있습니다.클래스 패스의 루트 또는 Spring Environment 속성 logging.config에서 지정된 위치에 적절한 구성 파일을 제공하여 더욱 커스터마이즈할 수 있습니다.(단, 로깅은 ApplicationContext가 생성되기 전에 초기화되므로 Spring @Configuration 파일의 @PropertySources에서 로깅을 제어할 수 없습니다.시스템 속성 및 기존 스프링 부트 외부 구성 파일은 정상적으로 작동합니다.)

그래서 세팅하려고 했는데logging.configproperties 파일 내의 properties:

logging.config=classpath:/logback-${spring.profiles.active}.xml

그러나 응용 프로그램을 시작할 때 logback-{profile.xml이 로드되지 않습니다.

로깅은 Spring Boot을 사용하는 모든 프로젝트에서 공통적으로 발생하는 문제라고 생각합니다.위의 접근법이 올바른 방향으로 가고 있습니까?

동작하는 다른 솔루션이 있습니다만, 그 솔루션(logback.xml 파일 또는 명령줄 속성에 Janino를 사용한 조건부 해석)은 그다지 우아하지 않습니다.

나는 해결책을 찾았고 왜 봄은 내 것을 사용하지 않는지 이해했다.logging.configapplication.properties 파일에 정의된 속성.

해결책과 설명

로깅을 초기화할 때 Spring Boot은 클래스 경로 또는 환경 변수만 검색합니다.

사용한 솔루션은 스프링 프로파일에 따라 올바른 로깅 설정 파일이 포함된 부모 logback.xml 파일을 포함하는 것이었습니다.

logback.xml

<configuration>
    <include resource="logback-${spring.profiles.active}.xml"/>
</configuration>

logback-dev.xml( 경우 logback-dev.xml) :

<included>

    <!-- put your appenders -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <!-- encoders are assigned the type
     ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
       <encoder>
           <pattern>%d{ISO8601} %p %t %c{0}.%M - %m%n</pattern>
           <charset>utf8</charset>
        </encoder>
    </appender>

    <!-- put your loggers here -->
    <logger name="org.springframework.web" additivity="false" level="INFO">
        <appender-ref ref="CONSOLE" />
    </logger>

    <!-- put your root here -->
    <root level="warn">
        <appender-ref ref="CONSOLE" />
    </root>

</included>

메모

spring.profiles.active앱을 시작할 때 명령줄 인수로 설정해야 합니다.
JVM 속성의 예:-Dspring.profiles.active=dev


레퍼런스 매뉴얼


편집(복수의 액티브프로파일)

복수의 파일을 회피하려면 , Janino 의존성이 필요한 조건부 처리를 사용할 수 있습니다(여기서 셋업).조건부 문서를 참조해 주세요.

이 방법을 사용하면 동시에 여러 활성 프로파일을 확인할 수도 있습니다.예(이 솔루션은 테스트하지 않았으므로, 동작하지 않는 경우는 코멘트를 주세요).

<configuration>

    <if condition='"${spring.profiles.active}".contains("profile1")'>
        <then>
         <!-- do whatever you want for profile1 -->
        </then>
    </if>

    <if condition='"${spring.profiles.active}".contains("profile2")'>
        <then>
         <!-- do whatever you want for profile2 -->
        </then>
    </if>

    <!-- common config -->

</configuration>

조건부 처리의 다른 예에 대해서는, @javasenior answer 를 참조해 주세요.

여러 프로파일을 처리할 수 있는 또 다른 방법은 각 환경에 대해 개별 속성 파일을 생성하는 것입니다.

application-module.properties

logging.config=classpath:logback-prod.xml

application-dev.properties

logging.config=classpath:logback-dev.xml

application-local.properties

logging.config=classpath:logback-local.xml

주의하다

주의하지 않으면 예기치 않은 곳에서 로그가 기록될 수 있습니다.

-Dspring.profiles.active=local,dev //will use logback-dev.xml
-Dspring.profiles.active=dev,local //will use logback-local.xml

각 프로파일에 대해 별도의 logback xmls를 추가하거나 IF 조건을 갖는 대신 다음(xmls의 차이가 적은 경우)을 제안합니다.여기에 있는 간단한 조건부 처리를 위한 Documentation 링크를 참조하십시오.

<springProfile name="dev">
<logger name="org.sample" level="DEBUG" />
</springProfile>
<springProfile name="prod">
<logger name="org.sample" level="TRACE" />
</springProfile>

로그백을 사용한 조건부 처리는 많은 로그백파일이 없는 솔루션이 됩니다.다음으로 스프링 프로파일을 사용한 링크와 로그백 설정 예를 나타냅니다.

<configuration>

    <property name="LOG_LEVEL" value="INFO"/>

        <if condition='"product".equals("${spring.profiles.active}")'>
           <then>
                <property name="LOG_LEVEL" value="INFO"/>
           </then>
           <else>
                <property name="LOG_LEVEL" value="ERROR"/>
           </else>
        </if>

         .
         .
         appender, logger tags etc.
         .
         .

         <root level="${LOG_LEVEL}">
             <appender-ref ref="STDOUT"/>
         </root>

</configuration>

또한 pom.xml에 추가해야 할 수도 있습니다.

<dependency>
    <groupId>org.codehaus.janino</groupId>
    <artifactId>janino</artifactId>
    <version>3.0.6</version>
</dependency>

태그가 .<springProperty/>Logback XML 파일 내에서 이 태그는 여기서 설명합니다.즉, 스프링 속성 파일에서 변수를 쉽게 추가할 수 있으며, 이 변수 값도 스프링까지 환경/시스템 변수에서 해결됩니다.

다른 프로파일에 대해 다른 logback.xml을 지정할 수 있습니다.단, 다음의 3단계입니다.

행동 합니다.application.properties ★★★★★★★★★★★★★★★★★」application.yml:

spring.profiles.active: test

2, 프로파일별로 다른 설정을 포함하도록 로그백을 설정합니다.

<!DOCTYPE configuration>
<configuration scan="true" scanPeriod="30 seconds">
    <springProperty scope="context" name="profile" source="spring.profiles.active"/>
    <include resource="logback.${profile}.xml"/>
</configuration>

3, " " " " 를 .logback.test.xml:

<?xml version="1.0" encoding="UTF-8"?>
<included>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    <root level="INFO"/>
</included>

아주 간단해, 다른 건 할 필요 없어.

언급URL : https://stackoverflow.com/questions/29429073/spring-boot-logback-and-logging-config-property

반응형