로그를 남기는 방법?
우리가 왜 Application에 log를 남기는 것이 중요한지 에 대해서는 지난시간에 살펴보았죠 ㅎㅎ
기억이 안나신다면 이전 포스팅을 참고해주세요 :)
huisam.tistory.com/entry/springlogging
그래서
오늘은 무엇을 배워볼까 하면요.!
바로 Application Code 상으로 로그를 남기는 방법을 알았으니까,
실제로 만들어진 로그를 File 로 만드는 방법을 알아볼까 해요!
먼저 저는 Log4j2 를 선택해서 알려드릴 예정입니다 :)
Why Log4j2?
가장 핵심적인 이유는 성능이 제일 뛰어나기 때문입니다 ( 하하 )
동일한 쓰레드 기준으로 Log4j2 처리량이 Log4j1 혹은 Logback 보다 월등한 차이를 가지고 성능을 나타내는 것을 볼 수 있어요 ㅎㅎ
자세한 내용은 링크를 참고하세요~!
저희는 뛰어난 개발자니까
뛰어난 모듈을 사용하도록 합시다 😄
자 그러면 차근차근 한단계씩 접근해보도록 할게요
주어진 환경
먼저 저희가 처한 환경은
spring-boot-starter-web 을 사용하고 있다는 전제하에 설명드릴게요~!
먼저 build.gradle 에서
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
}
위와 같은 dependency 를 정의하셨을 텐데요
기본적으로 spring-boot-starter-web에는 logging 모듈이 추가되어 있습니다
spring에서 지원하는 기본 로깅 모듈은 logBack 이기 때문에
우리는 이를 사용하지 않을 것이므로 의존성제거를 해야합니다.!
만일 제거하지 않고, log4j2의 의존성을 가져오고 설정한 뒤 application을 실행하면~?
되게 귀찮은 에러를 맞이할 수 있습니다 ㅠ
그러니까 logging 모듈에 대한 의존성을 제거하기 위해서.!
configurations {
all {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
}
위와 같은 의존성 제거를 꼭 해줘야 합니다.!
제거가 모두 끝났으니 우리가 원하는 의존성을 설정하러 갑시다
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-log4j2'
}
자 그러면 기본적인 준비는 끝났습니다.!
이제 Application에 Config(yml)를 설정하러 가볼까요.?
application.yml 에 하나씩 logging.pattern / logging.file.name ... etc
이렇게 설정하는 방법도 존재하는데요.
이렇게 되면 application.yml 이 너무 길어질 뿐더러, 우리의 입맛대로 커스텀하기가 힘든 단점이 있습니다
그러니 우리는 외부 log4j2.xml 이라는 config 파일을 생성하고,
application.yml 에는 위와 같은 file을 참조하도록 설계할 예정입니다
자, 그러면 실제로 설정하러 가볼까요~?
먼저 application.yml
logging:
config: classpath:log4j2.xml
위 설정파일은 그저 log4j2.xml을 읽기 위한 수단으로 사용하는 정도입니다.!
이제 오늘의 핵심인 log4j2.xml을 설정해봅시다.!
Log4j2.xml
중요한 항목 몇 가지가 있는데요,
- Property 태그는 공통적으로 사용하기 위한 속성들을 미리 정의한 것이고
- Appenders 태그는 로그가 실제로 찍혀지는 방법(layOut)과 file 생성에 대한 정책(RollingFile)을 정의하고
- Loggers 태그는 어떤 패키지의 로그를 Appender에 붙여줄 것인지
에 대한 태그들입니다.!
여담이지만, Log4j2 설정을 꼭 xml 으로만 할 필요는 없습니다
실제 SDK(Code상)으로도 위와 같은 설정 파일을 세팅할 수 있으니까요.!
다시 돌아와서, 간단히 제 설정파일을 설명하자면
- Console과 File에 대한 Layout을 분리합니다. = Property
- File 정책은 1시간마다 새로운 로그파일을 생성하고, File은 최대 5개까지만 유지하도록 허용합니다. = RollingFile
- 로그는 springframework에서 찍는 로그와 제 프로젝트에서 찍는 로그를 남길 생각입니다 = Loggers
한번 정상적으로 잘 동작하는지 실행해볼까요?
동작해보기
이미 준비되어 있는 테스트 코드를 실행해보면~? ( 동작 확인을 위해 Test Configuration을 따로 분리하지 않았습니다 )
우리가 적용한 Layout이 정말로 반영되었습니다.!
이어서,
정말로 log file이 따로 생성되었고, 내용을 확인해보니
File에도 정상적으로 로그가 잘 남는 것을 확인할 수 있었습니다.!
정리하며
Spring Boot 에서 Log4j2 를 설정하는 방법은 다양합니다
저처럼 Log4j2.xml 을 설정할 수 있고, 혹은 코드로 녹여낼 수도 있습니다
행여나 코드레벨에 관심이 있으신 분들도 있을까봐 링크로 남겨드립니다 ㅎㅎ
로그를 남기는 방법 + 왜 남겨야 하는지를 알았으니
바로 현업에서 실천하면 좋겠네요 ^-^
참고
spring boot logging - baeldung
'Developer > Spring' 카테고리의 다른 글
Spring Data JPA - 영속성 상태에 대해서 (2) | 2021.03.02 |
---|---|
Spring DI(Dependency Injection) & IoC Container - 의존성 주입이란? (0) | 2020.10.18 |
Spring AOP의 원리 - CGlib vs Dynamic Proxy (11) | 2020.08.18 |
Spring에서 API 문서를 자동화하는 방법 - Spring REST Docs (0) | 2020.06.22 |
Spring Boot 에서 log를 남기는 방법 - Spring log 남기기 (4) | 2020.06.13 |