반응형
코틀린에서는 자바 + 스프링에서 지원하는 @slf4j을 사용할 수 없다.
그래서 코틀린에서 로깅을 찍기 위해서 로깅 관련 의존성을 추가하여 로그를 찍는 것이 가장 간편한 방법이다.
의존성 추가
implementation("io.github.oshai:kotlin-logging-jvm:7.0.0")
KotlinLogging.logger 사용
private val logger = KotlinLogging.logger {}
fun main() {
logger.trace { "This is trace log" }
logger.debug { "This is debug log" }
logger.info { "This is info log" }
logger.warn { "This is warn log" }
logger.error { "This is error log" }
}
Kotlin Logging을 클래스 최상단에 작성한 다음, static 하게 해당 logger를 사용합니다.
KotlinLogging 트러블
- KotlinLogging.logger {} 을 다른 모듈에 구현하고 상위 모듈에서 logger를 사용하려는데 올바르게 인식이 되지 않았다.
- 상위 모듈에서 KotlinLogging.logger {}을 선언한 코틀린 파일을 두고 다른 클래스 파일에서 logger를 사용하려고 하는데 인식이 올바르게 되지 않았다.
➡️ 해결 방안
logging을 찍는 클래스 파일의 최상단에 초기화해주어 사용했다. @Slf4j처럼 필요한 곳에서 그냥 선언해서 사용하려고 한다.
코틀린 로깅 다른점
// INFO 로그를 찍을 수 있는지 판단 -> 람다 함수 실행 -> 문자열을 생성
logger.info { "코틀린이 미래다 -> ${variable}" }
// 문자열을 만든다. INFO 로그를 찍을 수 있는지 판단
logger.info("코틀린이 미래다 -> $variable")
// INFO 로그를 찍을 수 있는지 판단 -> 문자열 생성(치환)
logger.info("코틀린이 미래다 -> {}", variable)
// ==== //
// 현재 7.0에서 아래 메서드 형식 지원 안함
logger.info() // -> { } 람다 형태로 사용해야 됨
테스트
@GetMapping
fun getMembers(): List<MemberDocument> {
val results = memberMongoRepository.findAll()
logger.info { "로깅 테스트" }
return results
}
참고자료
https://github.com/oshai/kotlin-logging?tab=readme-ov-file
https://mvnrepository.com/artifact/io.github.oshai/kotlin-logging
반응형
'Kotlin > 코프링' 카테고리의 다른 글
코틀린 스코프 함수 총정리 - let, also, run, apply, with 제대로 사용하기 (0) | 2024.12.12 |
---|---|
[Kotlin] 코틀린 엘비스 연산자와 firstOrNull 활용법 - 쿼리 시 서버 메모리 최적화 (1) | 2024.12.08 |
[Kotlin+Spring] 코프링 Kotlin으로 Spring DTO 클래스 생성하기 - data class (0) | 2024.06.18 |