Coverage Summary for Class: StreamingAppender (dev.suresh.log)

Class Method, % Branch, % Line, % Instruction, %
StreamingAppender 0% (0/4) 0% (0/4) 0% (0/8) 0% (0/30)
StreamingAppender$Companion 0% (0/1) 0% (0/1) 0% (0/2)
Total 0% (0/5) 0% (0/4) 0% (0/9) 0% (0/32)


 package dev.suresh.log
 
 import ch.qos.logback.classic.spi.ILoggingEvent
 import ch.qos.logback.core.UnsynchronizedAppenderBase
 import ch.qos.logback.core.encoder.Encoder
 import kotlinx.coroutines.channels.BufferOverflow
 import kotlinx.coroutines.flow.MutableSharedFlow
 import kotlinx.coroutines.flow.SharedFlow
 
 /**
  * Logback appender that broadcasts formatted log events via [SharedFlow]. Configure encoder in
  * logback.xml to reuse existing formatting.
  */
 class StreamingAppender : UnsynchronizedAppenderBase<ILoggingEvent>() {
 
   var encoder: Encoder<ILoggingEvent>? = null
 
   override fun append(event: ILoggingEvent) {
     val bytes = encoder?.encode(event) ?: return
     logs.tryEmit(bytes.decodeToString().trimEnd())
   }
 
   companion object {
 
     val logs: SharedFlow<String>
       field =
           MutableSharedFlow(
               replay = 50,
               extraBufferCapacity = 500,
               onBufferOverflow = BufferOverflow.DROP_OLDEST,
           )
   }
 }