From 9e15f07aefe6ea1f366466c6721b92e77e3f1b41 Mon Sep 17 00:00:00 2001 From: Marcin Aman <marcin.aman@gmail.com> Date: Tue, 22 Jun 2021 15:17:55 +0200 Subject: Logging in CLI (#1976) --- core/src/main/kotlin/utilities/DokkaLogging.kt | 59 ++++++++++++++++++++------ 1 file changed, 47 insertions(+), 12 deletions(-) (limited to 'core/src/main') diff --git a/core/src/main/kotlin/utilities/DokkaLogging.kt b/core/src/main/kotlin/utilities/DokkaLogging.kt index 6b8ed5d2..0302b8a2 100644 --- a/core/src/main/kotlin/utilities/DokkaLogging.kt +++ b/core/src/main/kotlin/utilities/DokkaLogging.kt @@ -11,28 +11,63 @@ interface DokkaLogger { } fun DokkaLogger.report() { - if (DokkaConsoleLogger.warningsCount > 0 || DokkaConsoleLogger.errorsCount > 0) { - info("Generation completed with ${DokkaConsoleLogger.warningsCount} warning" + - (if(DokkaConsoleLogger.warningsCount == 1) "" else "s") + - " and ${DokkaConsoleLogger.errorsCount} error" + - if(DokkaConsoleLogger.errorsCount == 1) "" else "s" + if (warningsCount > 0 || errorsCount > 0) { + info( + "Generation completed with $warningsCount warning" + + (if (warningsCount == 1) "" else "s") + + " and $errorsCount error" + + if (errorsCount == 1) "" else "s" ) } else { - info("generation completed successfully") + info("Generation completed successfully") } } -object DokkaConsoleLogger : DokkaLogger { +enum class LoggingLevel(val index: Int) { + DEBUG(0), PROGRESS(1), INFO(2), WARN(3), ERROR(4); +} + +/** + * Used to decouple the transport layer from logger and make it convenient for testing + */ +fun interface MessageEmitter : (String) -> Unit { + companion object { + val consoleEmitter: MessageEmitter = MessageEmitter { message -> println(message) } + } +} + +class DokkaConsoleLogger( + val minLevel: LoggingLevel = LoggingLevel.DEBUG, + private val emitter: MessageEmitter = MessageEmitter.consoleEmitter +) : DokkaLogger { override var warningsCount: Int = 0 override var errorsCount: Int = 0 - override fun debug(message: String)= println(message) + override fun debug(message: String) { + if (shouldBeDisplayed(LoggingLevel.DEBUG)) emitter(message) + } - override fun progress(message: String) = println("PROGRESS: $message") + override fun progress(message: String) { + if (shouldBeDisplayed(LoggingLevel.PROGRESS)) emitter("PROGRESS: $message") + } - override fun info(message: String) = println(message) + override fun info(message: String) { + if (shouldBeDisplayed(LoggingLevel.INFO)) emitter(message) + } - override fun warn(message: String) = println("WARN: $message").also { warningsCount++ } + override fun warn(message: String) { + if (shouldBeDisplayed(LoggingLevel.WARN)) { + emitter("WARN: $message") + } + warningsCount++ + } + + override fun error(message: String) { + if (shouldBeDisplayed(LoggingLevel.ERROR)) { + emitter("ERROR: $message") + } + errorsCount++ + } - override fun error(message: String) = println("ERROR: $message").also { errorsCount++ } + private fun shouldBeDisplayed(messageLevel: LoggingLevel): Boolean = messageLevel.index >= minLevel.index } -- cgit