티스토리 뷰
자바 백엔드 진영에서 로그는 이미 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
'kotlin' 카테고리의 다른 글
kotest 훑어보기 (1) | 2022.10.17 |
---|---|
kotlin(+JPA) entity 에서 setter 를 막는 법 (4) | 2022.08.27 |
생성자 필드에 애노테이션 선언시 리플렉션을 이용해 찾는 법 (0) | 2021.10.07 |
jpa entity 에 data class 를 사용해도 될까? (3) | 2021.07.17 |
kotlin 의 json 라이브러리 kotlinx.serialization (0) | 2021.07.17 |
- Total
- Today
- Yesterday
- Kotlin
- mariadb
- 정규표현식
- Spring
- javascript
- go-core
- java
- OOP
- EffectiveJava
- frontcode
- generics
- MySQL
- DesignPattern
- db
- Jackson
- clean code
- http
- frontend개발환경
- TEST
- JPA
- code
- java8
- Design Pattern
- JavaScript Core
- spring cloud
- servlet
- toby
- Git
- backend개발환경
- programming
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |