KotlinLogging - option to globally disable logging

This commit is contained in:
2026-09-12 20:29:20 +01:00
parent 7384642a6d
commit ab88896b01
4 changed files with 21 additions and 7 deletions
@@ -1,3 +1,7 @@
package com.shr4pnel.ferretirc.irc.util package com.shr4pnel.ferretirc.irc.util
class Helpers class Helpers {
companion object LoggingConfig {
var enableLogging = true
}
}
@@ -1,18 +1,16 @@
package com.shr4pnel.ferretirc.net package com.shr4pnel.ferretirc.net
import com.shr4pnel.ferretirc.irc.util.Helpers
import com.shr4pnel.ferretirc.net.messages.ServerMessage import com.shr4pnel.ferretirc.net.messages.ServerMessage
import io.github.oshai.kotlinlogging.KotlinLogging import io.github.oshai.kotlinlogging.KotlinLogging
import io.ktor.http.parameters import io.github.oshai.kotlinlogging.slf4j.logger
import io.ktor.network.selector.SelectInterest
import io.ktor.util.toUpperCasePreservingASCIIRules
import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.Channel
import org.slf4j.helpers.NOPLogger
class MessageParser(val incoming: Channel<String>) { class MessageParser(val incoming: Channel<String>) {
private val logger = KotlinLogging.logger("MessageParser")
val incomingParsedMessages = Channel<ServerMessage>() val incomingParsedMessages = Channel<ServerMessage>()
private companion object MessageBuilder { private companion object MessageBuilder {
val logger = KotlinLogging.logger("MessageParser.MessageBuilder")
fun getTrailingParameterIndex(params: List<String>) = params.indexOfLast { it.startsWith(":") } fun getTrailingParameterIndex(params: List<String>) = params.indexOfLast { it.startsWith(":") }
sealed interface Command { sealed interface Command {
@@ -58,6 +56,7 @@ class MessageParser(val incoming: Channel<String>) {
} }
} }
} }
private val logger = if (Helpers.enableLogging) KotlinLogging.logger {} else KotlinLogging.logger(NOPLogger.NOP_LOGGER)
class NumericCommand(val number: Int, val parameters: List<String>?) : Command { class NumericCommand(val number: Int, val parameters: List<String>?) : Command {
override fun toServerMessage(): ServerMessage { override fun toServerMessage(): ServerMessage {
@@ -106,6 +105,7 @@ class MessageParser(val incoming: Channel<String>) {
suspend fun start() { suspend fun start() {
for (msg in incoming) { for (msg in incoming) {
incomingParsedMessages.send(build(msg)) incomingParsedMessages.send(build(msg))
logger.trace { "Receiving: $msg" }
} }
} }
} }
@@ -1,7 +1,10 @@
package com.shr4pnel.ferretirc.net package com.shr4pnel.ferretirc.net
import com.shr4pnel.ferretirc.irc.util.Helpers
import com.shr4pnel.ferretirc.net.messages.MessageIO import com.shr4pnel.ferretirc.net.messages.MessageIO
import com.shr4pnel.ferretirc.net.messages.ServerMessage import com.shr4pnel.ferretirc.net.messages.ServerMessage
import io.github.oshai.kotlinlogging.KotlinLogging
import io.github.oshai.kotlinlogging.slf4j.logger
import io.ktor.network.sockets.Socket import io.ktor.network.sockets.Socket
import io.ktor.network.sockets.openReadChannel import io.ktor.network.sockets.openReadChannel
import io.ktor.utils.io.ByteReadChannel import io.ktor.utils.io.ByteReadChannel
@@ -12,6 +15,7 @@ import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.slf4j.helpers.NOPLogger
import kotlin.reflect.KClass import kotlin.reflect.KClass
import kotlin.reflect.cast import kotlin.reflect.cast
@@ -20,6 +24,8 @@ class MessageReader(socket: Socket, scope: CoroutineScope) : MessageIO(socket, s
private val listenedMessages = mutableListOf<ServerMessage>() private val listenedMessages = mutableListOf<ServerMessage>()
val messageBuffer = MutableSharedFlow<ServerMessage>(16, 64) val messageBuffer = MutableSharedFlow<ServerMessage>(16, 64)
val parser = MessageParser(incomingMessages) val parser = MessageParser(incomingMessages)
private val logger = if (Helpers.enableLogging) KotlinLogging.logger {} else KotlinLogging.logger(NOPLogger.NOP_LOGGER)
init { init {
scope.launch { scope.launch {
@@ -35,6 +41,7 @@ class MessageReader(socket: Socket, scope: CoroutineScope) : MessageIO(socket, s
while (true) { while (true) {
val line = receive.readLineStrict() ?: break // >:( no LineEnding option for just CRLF? charlatans... val line = receive.readLineStrict() ?: break // >:( no LineEnding option for just CRLF? charlatans...
incomingMessages.send(line) incomingMessages.send(line)
logger.debug { "Receive: $line" }
} }
} }
@@ -1,17 +1,20 @@
package com.shr4pnel.ferretirc.net package com.shr4pnel.ferretirc.net
import com.shr4pnel.ferretirc.irc.util.Helpers
import com.shr4pnel.ferretirc.net.messages.MessageIO import com.shr4pnel.ferretirc.net.messages.MessageIO
import io.github.oshai.kotlinlogging.KotlinLogging import io.github.oshai.kotlinlogging.KotlinLogging
import io.github.oshai.kotlinlogging.slf4j.logger
import io.ktor.network.sockets.Socket import io.ktor.network.sockets.Socket
import io.ktor.network.sockets.openWriteChannel import io.ktor.network.sockets.openWriteChannel
import io.ktor.utils.io.ByteWriteChannel import io.ktor.utils.io.ByteWriteChannel
import io.ktor.utils.io.writeFully import io.ktor.utils.io.writeFully
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.slf4j.helpers.NOPLogger
class MessageWriter(socket: Socket, scope: CoroutineScope) : MessageIO(socket, scope) { class MessageWriter(socket: Socket, scope: CoroutineScope) : MessageIO(socket, scope) {
private lateinit var send: ByteWriteChannel private lateinit var send: ByteWriteChannel
private val logger = KotlinLogging.logger("MessageWriter") private val logger = if (Helpers.enableLogging) KotlinLogging.logger {} else KotlinLogging.logger(NOPLogger.NOP_LOGGER)
override fun start() = scope.launch { override fun start() = scope.launch {
send = socket.openWriteChannel() send = socket.openWriteChannel()