티스토리 뷰

kotlin

코틀린에서 logger 사용

LichKing 2022. 6. 1. 13:45

자바 백엔드 진영에서 로그는 이미 slf4j 가 평정했다. slf4j 를 기반으로 log4j, logback, log4j2 등 구현체들이 사용되고 있는 중이다.

코틀린에서도 유사하게 사용하면 되는데 아래와 같이 로깅할 수 있다.

logger.info("1+1 = {}", variable)

기존 로거에서 {} 와 같이 템플릿을 지원한건 로그 레벨에 따른 레이지 연산을 지원하기 위해서였다. 가령 예를 들어

logger.info("1+1 = " + variable)

이렇게 작성하면 메세지와 변수 variable를 더하는 연산이 무조건 실행된다. 이 무조건이라는 표현은 애플리케이션 로그 레벨이 warn 으로 설정되어 info 레벨의 메세지를 로그를 남기지않아도 되는 환경에서도 실행된다는 의미이다. 다만 첫번째 예처럼 {} 로 사용하면 로그레벨에 맞춰 로그를 남길때만 실행하게된다.

 

하지만 코틀린에서는 string template 이라는 좋은 기능이 지원되고있기 때문에 로그를 남길때도 무심코 사용하게된다.

logger.info("1+1 = $variable")

이런식으로 사용하면 로그에서 지연연산을 사용하기 어렵다. 그래서 코틀린에서도 지연연산을 위해서는 두번째 예처럼 작성해야하는데 이렇게 사용하다보니 뭔가 코틀린스럽지못하다는 생각을 계속 떨쳐내기 힘들었다.

 

그래서 찾아보니 역시나 kotlin-logging 이라는 오픈소스가 있었고, 해당 라이브러리를 이용하면 이런식으로 로깅할 수 있다.

logger.info { "1+1 = $variable" }

()에서 {} 로 변한걸 볼 수 있다. 이게 변했다는건 logger 에다가 함수를 파라미터로 전달한다는 의미이다. 함수를 전달하기 때문에 string template 기능을 이용하더라도 지연연산을 이용할 수 있다.

 

그리고 또 로깅을 알아보다가 로거 객체를 어디에 어떻게 선언하는지에 대한 고민도 많이 됐었는데, 최상단에 선언하는걸 권장하고 있다. 이를 kotlin-logging 과 함께 사용해보면

val logger = KotlinLogging.logger {}

class SomeClass {

}

요런 형태로 사용하는걸 권장하고 있다.

 

참고자료

- https://www.baeldung.com/kotlin/kotlin-logging-library

 

Guide to Kotlin-Logging | Baeldung on Kotlin

Have a look at a Kotlin sfl4j wrapper, named simply kotlin-logging.

www.baeldung.com

- https://github.com/MicroUtils/kotlin-logging

 

GitHub - MicroUtils/kotlin-logging: Lightweight logging framework for Kotlin. A convenient and performant logging library wrappi

Lightweight logging framework for Kotlin. A convenient and performant logging library wrapping slf4j with Kotlin extensions - GitHub - MicroUtils/kotlin-logging: Lightweight logging framework for K...

github.com

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함