[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 대신 다른 이름으로 바꾸면 해결될 것이다!
댓글남기기