티스토리 툴바


Computer Language/Java2012/03/22 08:04

1. 문제
logback.xml 안에서 환경별 세부 설정을 include해서 사용하고있었다.
* logback.xml 위치 : src/main/resources
* logback-${env}.xml 위치 : src/main/resources 

<?xml version="1.0" encoding="UTF-8"?>

<configuration>

<include resource="logback-${env}.xml"/>

</configuration>


그런데, 환경과 상관없이 무조건 테스트환경 logback 설정이 읽혀, 기대한대로 로그가 출력되지 않는 문제가 발견되었다.

조사해보니.. logback은 아래의 우선순위대로 설정파일을 로드하고 있었다.
logback.xml 파일이 먼저 읽히길 바랬으나, include할 logback-test.xml 파일이 먼저 읽혀 문제가 됐던 것이다. 

1. logback.configurationFile 

2. logback.groovy

3. logback-test.xml

4. logback.xml



2. 해결방법
include할 logback-${env}.xml 파일의 위치를 조정하여 해결하였다.
* logback.xml 위치 : src/main/resources
* logback-${env}.xml 위치 : src/main/resources/logs

<?xml version="1.0" encoding="UTF-8"?>

<configuration>

<include resource="logs/logback-${env}.xml"/>

</configuration>

 

3. 참고
아래는 설정파일을 읽는 logback 소스이다.

  final public static String GROOVY_AUTOCONFIG_FILE = "logback.groovy";

  final public static String AUTOCONFIG_FILE = "logback.xml";

  final public static String TEST_AUTOCONFIG_FILE = "logback-test.xml";

  final public static String CONFIG_FILE_PROPERTY = "logback.configurationFile";

  final public static String STATUS_LISTENER_CLASS = "logback.statusListenerClass";


   public URL findURLOfDefaultConfigurationFile(boolean updateStatus) {

        ClassLoader myClassLoader = Loader.getClassLoaderOfObject(this);

        URL url = findConfigFileURLFromSystemProperties(myClassLoader, updateStatus);

        if (url != null) {

          return url;

        }


        url = getResource(GROOVY_AUTOCONFIG_FILE, myClassLoader, updateStatus);

        if (url != null) {

          return url;

        }


        url = getResource(TEST_AUTOCONFIG_FILE, myClassLoader, updateStatus);

        if (url != null) {

          return url;

        }


        return getResource(AUTOCONFIG_FILE, myClassLoader, updateStatus);

  }

 
 
저작자 표시
Posted by cherrykyun