Kermit icon indicating copy to clipboard operation
Kermit copied to clipboard

Ktor Client logging integration

Open petrchatrny opened this issue 9 months ago • 1 comments

I was thinking about adding an extension for Ktor Client. It is almost the same integration as for the Koin library. Ktor also has its own logger, so it could be done very similarly. For more information see ktor docs.

Logger:

import io.ktor.client.plugins.logging.Logger as KtorLogger
import co.touchlab.kermit.Logger as KermitLogger

class KermitKtorLogger(private val logger: KermitLogger) : KtorLogger {
    override fun log(message: String) {
        logger.i(message)
    }
}

Usage:

import co.touchlab.kermit.Logger
import io.ktor.client.HttpClient
import io.ktor.client.engine.java.Java
import io.ktor.client.plugins.logging.LogLevel
import io.ktor.client.plugins.logging.Logging

class KtorClient {
    val httpClient = HttpClient(Java) {
        install(Logging) {
            logger = KermitKtorLogger(Logger.withTag("Ktor"))
            level = LogLevel.INFO
        }
    }
}

petrchatrny avatar Mar 15 '25 23:03 petrchatrny

I think this sounds like a good extension. If you create a PR please follow the patterns established for the koin extension. Also consider supporting a configurable log level (maybe just a constructor param with a default of "info"

samhill303 avatar Mar 19 '25 19:03 samhill303