Logger foundation
최신 안정판 Bluetape4k 1.11.0 릴리스 기준
Logger 선언 방식은 호출 위치, 이름 안정성, 테스트에서의 식별 가능성을 결정합니다.
두 진입점
섹션 제목: “두 진입점”KLogging은 class나 companion object가 상속하고 log property를 공유할 때 적합합니다. log는 Kotlin lazy로 첫 접근에 한 번 생성됩니다.
class InvoiceService { companion object : KLogging()
fun issue() { log.info { "Issuing invoice" } }}KotlinLogging은 top-level 코드, 명시적 category, KClass 기반 이름에 적합합니다.
private val auditLog = KotlinLogging.logger("billing.audit")private val fileLog = KotlinLogging.logger { }val serviceLog = KotlinLogging.logger(InvoiceService::class)이름 계약
섹션 제목: “이름 계약”logger(name)은 blank 이름을 IllegalArgumentException으로 거부합니다. lambda entrypoint와 KLogging은 내부 KLoggerNameResolver가 synthetic/companion 이름을 정규화합니다. 이름이 dashboard와 routing rule의 public key라면 추론 이름보다 명시적 category를 선택합니다.
Provider 경계
섹션 제목: “Provider 경계”모듈은 SLF4J Logger를 반환할 뿐 backend를 설치하지 않습니다. 애플리케이션은 Logback 등 provider 하나와 설정을 소유합니다. library가 appender나 root level을 몰래 바꾸면 host application 정책을 침범합니다.
선택 기준
섹션 제목: “선택 기준”| 상황 | 선택 |
|---|---|
| class의 모든 instance가 같은 category 사용 | companion KLogging() |
| file/top-level function | KotlinLogging.logger {} |
| 안정적인 운영 category 필요 | logger("stable.name") |
| type을 명시적으로 반영 | logger(Type::class) |
Source와 tests
섹션 제목: “Source와 tests”다음: message 계산 비용과 실패를 Lazy messages에서 다룹니다.