@@ -20,9 +20,14 @@ import android.util.Log
2020import com.google.firebase.dataconnect.BuildConfig
2121import com.google.firebase.dataconnect.LogLevel
2222import com.google.firebase.dataconnect.core.LoggerGlobals.LOG_TAG
23+ import com.google.firebase.dataconnect.core.LoggerGlobals.Logger
2324import com.google.firebase.util.nextAlphanumericString
2425import kotlin.random.Random
26+ import kotlinx.coroutines.CoroutineScope
27+ import kotlinx.coroutines.DelicateCoroutinesApi
28+ import kotlinx.coroutines.GlobalScope
2529import kotlinx.coroutines.flow.MutableStateFlow
30+ import kotlinx.coroutines.launch
2631
2732internal interface Logger {
2833 val name: String
@@ -59,7 +64,11 @@ private class LoggerImpl(override val name: String) : Logger {
5964internal object LoggerGlobals {
6065 const val LOG_TAG = " FirebaseDataConnect"
6166
62- val logLevel = MutableStateFlow (LogLevel .WARN )
67+ val logLevel =
68+ MutableStateFlow (LogLevel .WARN ).also { logLevelFlow ->
69+ val logger = Logger (" LogLevelChange" )
70+ @OptIn(DelicateCoroutinesApi ::class ) logger.logChanges(logLevelFlow, GlobalScope )
71+ }
6372
6473 inline fun Logger.debug (message : () -> Any? ) {
6574 if (logLevel.value <= LogLevel .DEBUG ) debug(" ${message()} " )
@@ -86,4 +95,21 @@ internal object LoggerGlobals {
8695 }
8796
8897 fun Logger (name : String ): Logger = LoggerImpl (name)
98+
99+ // Log a message each time the log level changes. This is intended to provide context when debug
100+ // logging is enabled and no logs are produced, to at least confirm that debug logging has been
101+ // enabled. Also, it will leave a "mark" in the logs when debug logging is _disabled_ to explain
102+ // why the debug logs stop.
103+ private fun Logger.logChanges (flow : MutableStateFlow <LogLevel >, coroutineScope : CoroutineScope ) {
104+ var previousLogLevel = flow.value
105+ coroutineScope.launch {
106+ flow.collect { newLogLevel: LogLevel ->
107+ if (newLogLevel != previousLogLevel) {
108+ val emitLogLevel = LogLevel .noisiestOf(newLogLevel, previousLogLevel)
109+ log(null , emitLogLevel, " Log level changed to $newLogLevel (was $previousLogLevel )" )
110+ previousLogLevel = newLogLevel
111+ }
112+ }
113+ }
114+ }
89115}
0 commit comments