반응형

문제

스프링 레거시로 프로젝트 설정을 하는 도중 logback 설정이 적용되지 않는 현상이 있었다.

 

원인

해당 상황은 logback이 초기에 실행될 때, logback.xml, logback-test.xml 파일을 찾고 없으면 기본적인 것인 구현체를 기본설정으로 구성되도록 구현되어있기 때문이었다.

 

profile별 로깅 설정을 동적으로 구성하도록 하기위해서 스프링 부트에서 제공하는 logback 확장인 logback-spring.xml으로 구성 해보았는데 스프링 레거시에서는 역시나 동작하지 않았다.

  • 스프링 부트에서는 logback 확장을 지원해서 logback-spring.xml 로 설정을 구성하면 서블릿 컨테이너가 실행되고 이후에 스프링 컨테이너가 시작되면서 설정을 읽기 때문에 스프링과 관련된 기술들을 사용할 수 있도록 해준다.

 

해결

logback에서 조건부 처리를 위해서 필요한 janino 라이브러리를 이용해서 logback.xml 을 profile별 동적으로 구성되게하여서 이 문제를 해결하였다.

 

우선 janino 라이브러리 추가가 필요하다.

<!-- logback.xml 설정파일에서 자바 표현식을 사용할 수 있게 해주는 라이브러리-->
<dependency>
    <groupId>org.codehaus.janino</groupId>
    <artifactId>janino</artifactId>
    <version>3.1.8</version>
</dependency>
<dependency>
    <groupId>org.codehaus.janino</groupId>
    <artifactId>commons-compiler</artifactId>
    <version>3.1.8</version>
</dependency>

 

logback.xml

<if condition='isDefined("spring.profiles.active")'>
    <then>
        <if condition='"${spring.profiles.active}".contains("local")'>
            <then>
                <include resource="/console-appender.xml"/>
                <logger name="org.hibernate.SQL" level="DEBUG" />
                <!--    <logger name="org.hibernate.type" level="TRACE" />-->
                <root level="DEBUG">
                    <appender-ref ref="CONSOLE"/>
                </root>
            </then>
        </if>
        <if condition='"${spring.profiles.active}".contains("prod")'>
            <then>
                <include resource="/file-info-appender.xml"/>
                <include resource="/file-warn-appender.xml"/>
                <include resource="/file-error-appender.xml"/>
                <root level="INFO">
                    <appender-ref ref="FILE-INFO"/>
                    <appender-ref ref="FILE-WARN"/>
                    <appender-ref ref="FILE-ERROR"/>
                </root>
            </then>
        </if>
    </then>
</if>
  • logback.xml에서 조건을 이용해서 profile별 로깅환경을 설정할 수 있다.

 

 

참고

 

반응형

+ Recent posts