복붙노트

[SPRING] 봄 부팅, logback 및 logging.config 속성

SPRING

봄 부팅, logback 및 logging.config 속성

로그백 라이브러리가있는 스프링 부트 프로젝트에서 로깅을 구현하고 있습니다. 내 스프링 프로파일 ( 'spring.pofiles.active'속성)에 따라 다른 로깅 구성 파일을로드하려고합니다. logback-dev.xml, logback-inte.xml 및 logback-prod.xml의 세 파일이 있습니다. 나는 봄 부팅 버전 1.2.2를 사용하고있다. 릴리스.

스프링 부트 문서 (여기)에서 읽으십시오. 그것은 말한다 :

그래서 내 application.properties 파일에 'logging.config'속성을 설정하려고했습니다 :

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

하지만 내 응용 프로그램을 시작하면 내 logback- {profile} .xml이로드되지 않습니다 ...

로깅은 스프링 부트를 사용하는 모든 프로젝트에서 발생하는 공통적 인 문제라고 생각합니다. 나는 올바른 방향으로 가고 있는지 알고 싶습니다. 왜냐하면 나는 다른 해결책도 있지만 잘 모르겠지만 (logback.xml 파일이나 명령 줄 속성의 Janino와 조건부 구문 분석) 찾기가 쉽지 않기 때문입니다.

해결법

  1. ==============================

    1.솔루션을 찾았는데 왜 spring이 application.properties 파일에 정의 된 'logging.config'속성에 신경을 쓰지 않는지 이해했습니다.

    솔루션을 찾았는데 왜 spring이 application.properties 파일에 정의 된 'logging.config'속성에 신경을 쓰지 않는지 이해했습니다.

    해결책 및 설명 :

    로깅을 초기화 할 때 스프링 부트는 클래스 경로 또는 환경 변수 만 찾습니다 (http://docs.spring.io/spring-boot/docs/0.5.0.M3/api/org/springframework/boot/context/initializer/LoggingApplicationContextInitializer 참조). .html).

    내가 찾은 가장 좋은 해결책은 스프링 프로파일에 따라 올바른 로깅 설정 파일을 포함 할 상위 logback.xml 파일을 포함시키는 것입니다.

    logback.xml :

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

    logback- [profile] .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'는 앱을 시작할 때 명령 줄 인수에 설정해야합니다. E.G 속성의 경우 : -Dspring.profiles.active = dev

    참고 문헌 :

    수정 (여러 활성 프로필) : 여러 파일을 피하기 위해 Janino 종속성 (여기에서 설정)이 필요한 조건부 처리를 사용할 수 있습니다 (조건부 문서 참조). 이 방법을 사용하면 여러 활성 프로필을 동시에 확인할 수도 있습니다. E.G (나는이 솔루션을 테스트하지 않았고 작동하지 않는다면 주석 달기) :

    <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 응답을 참조하십시오.

  2. ==============================

    2.여러 프로파일을 처리 할 수있는 또 다른 접근법은 각 환경에 대해 별도의 특성 파일을 작성하는 것입니다.

    여러 프로파일을 처리 할 수있는 또 다른 접근법은 각 환경에 대해 별도의 특성 파일을 작성하는 것입니다.

    application-prod.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
    
  3. ==============================

    3.각 프로파일에 대해 별도의 logback xml을 추가하거나 IF 조건을 추가하는 대신 쉬운 조건 처리를 위해 다음과 같이 제안합니다 (xml의 차이가 적은 경우).

    각 프로파일에 대해 별도의 logback xml을 추가하거나 IF 조건을 추가하는 대신 쉬운 조건 처리를 위해 다음과 같이 제안합니다 (xml의 차이가 적은 경우).

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

    4.로그백을 사용한 조건부 처리는 많은 로그백 파일이없는 솔루션입니다. 다음은 스프링 프로파일을 사용하는 링크 및 샘플 로그백 구성입니다.

    로그백을 사용한 조건부 처리는 많은 로그백 파일이없는 솔루션입니다. 다음은 스프링 프로파일을 사용하는 링크 및 샘플 로그백 구성입니다.

    <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>
    
  5. ==============================

    5.Spring은 Logback XML 파일 내부의 다음 태그 를 지원합니다.이 태그는 여기에서 설명합니다. 이것은 Spring 속성 파일에서 변수를 쉽게 추가 할 수 있다는 것을 의미합니다.이 변수 값이 Spring에 의한 환경 변수 / 시스템 변수로부터도 해결됩니다.

    Spring은 Logback XML 파일 내부의 다음 태그 를 지원합니다.이 태그는 여기에서 설명합니다. 이것은 Spring 속성 파일에서 변수를 쉽게 추가 할 수 있다는 것을 의미합니다.이 변수 값이 Spring에 의한 환경 변수 / 시스템 변수로부터도 해결됩니다.

  6. ==============================

    6.서로 다른 프로필에 대해 서로 다른 logback.xml을 지정할 수 있으며 다음 세 단계 만 수행 할 수 있습니다.

    서로 다른 프로필에 대해 서로 다른 logback.xml을 지정할 수 있으며 다음 세 단계 만 수행 할 수 있습니다.

    1, 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>
    

    그것은 매우 간단합니다. 다른 일을 할 필요가 없습니다.

  7. from https://stackoverflow.com/questions/29429073/spring-boot-logback-and-logging-config-property by cc-by-sa and MIT license