[Log4j] log4j-test.xml 파일 명칭 주의사항

문제 상황

Spring Boot에서 Profile 설정으로 로컬환경/개발환경/운영환경을 다르게 설정하는 것은 익히 알고 있을 것이다. 마찬가지로 회사에서는 해당 application-${환경설정}.yml 파일에 로깅설정이 포함되어 있다. 예를 들어 application-local.yml 파일에는 다음과 같이 설정되어 있다.

logging:
  config: classpath:log4j2-local.yml


로컬환경에서는 콘솔에만 로그를 남기고, 개발/운영환경에서는 에러가 발생하면 해당로그를 메일로 발송하게 설정되어 있다. 문제는 로컬에서 JUnit으로 테스트 중 에러가 발생했을 때 test환경에서 에러가 발생했다는 메일이 날아온 것이었다 😲

문제 파악

구성하고 있는 환경중 test 환경이 있어서 log4j2-test.yml 파일이 있었던 것이 문제였다.

  • Log4j가 ConfigurationFactory 를 사용해서 구성을 로드할 때, 클래스패스에서 ` log4j2-test.properties` 를 검색한다.
  • log4j2-test.properties가 검색되지 않으면 클래스패스에서 log4j2-test.yml 를 찾는다.
  • log4j2-test.yml 가 검색되지 않으면 클래스패스에서 log4j2-test.json 또는 log4j2-test.jsn 을 찾는다.
  • json 파일이 검색되지 않으면 클래스패스에서 log4j2-test.xml 을 찾는다.
  • 그 외 log4j.properties, log4j2.yaml, log4j2.yml, log4j.json, log4j2.jsn, log4j.xml 를 찾는다.
  • 위의 설정파일을 모두 찾을 수 없으면 DefaultConfiguration, 즉 로깅출력이 콘솔로 이동한다.

즉, JUnit 실행시 따로 로깅설정을 하지 않았더니 log4j2-test.yml 파일을 찾아 로깅을 한 것이 문제였다.

문제 해결

테스트 환경은 지금 사용하고 있지 않아서 log4j2-test.yml 파일과 application-test.yml 파일을 삭제해주었다. 만약 삭제할 수 없는 상황이라면 이름을 test 대신 다른 이름으로 바꾸면 해결될 것이다!


References

태그:

카테고리:

댓글남기기