애플리케이션에 적절한 로깅이나 출력 로직이 없으면 디버깅이나 장애 발생 시,
로직의 흐름이나 예외 원인 등을 추적하기 어렵다.
코드가 어떻게 동작하는지, 서비스에서 문제가 발생했을 때 원인이 무엇인지 빠르게 파악하기 위해서 로깅은 필수이다.
특히 운영 환경에서는 디버깅이 쉽지 않기 때문에 그 중요성은 더 크다고 생각한다.
따라서 지금 진행중인 개인 프로젝트에 KotlinLogging이라는 라이브러리를 활용하여 로깅을 도입하기로 했다.
KotlinLogging은 Kotlin 전용 로깅 라이브러리로, 내부적으로는 SLF4J를 기반으로 동작한다.
위 라이브러리를 선택한 이유는 다음과 같다.
Kotlin 스타일에 잘 어울림INFO로 설정되어 있으면 TRACE, DEBUG 레벨의 람다는 호출되지 않는다.SLF4J 기반이라 확장성과 호환성이 뛰어나다.Logback, Log4j2 등 다른 로깅 프레임워크와 쉽게 연동할 수 있다.Maven
<dependency>
<groupId>io.github.oshai</groupId>
<artifactId>kotlin-logging-jvm</artifactId>
<version>7.0.3</version>
</dependency>
Gradle
implementation("io.github.oshai:kotlin-logging-jvm:7.0.3")
얘네는 Spring Boot의 의존성 관리가 자동으로 버전을 지정해주지 않기 떄문에 버전 정보를 명시해줘야 한다.
버전 정보는 KotlinLogging GitHub 에서 확인할 수 있다.
코틀린 파일 최상단에 다음과 같이 선언한다.
private val logger = KotlinLogging.logger {}
fun example() {
val hello = "Hello World!"
logger.info { hello }
val level = "debug"
logger.debug { "$level logging" }
try {
throw IllegalArgumentException("예외 발생")
} catch (e: Exception) {
logger.error(e) { "An error occurred: ${e.message}" }
}
}
error(e) 형태는 예외 스택트레이스를 로그 메시지 뒤에 함께 출력해준다.