Make LoggingStateObserver into use

This commit is contained in:
Him188 2021-06-17 17:33:42 +08:00
parent 44bfe3dbb6
commit b8b8cb1fad
3 changed files with 38 additions and 27 deletions

View File

@ -35,6 +35,8 @@ import net.mamoe.mirai.internal.network.handler.NetworkHandlerSupport.BaseStateI
import net.mamoe.mirai.internal.network.handler.selector.KeepAliveNetworkHandlerSelector
import net.mamoe.mirai.internal.network.handler.selector.NetworkException
import net.mamoe.mirai.internal.network.handler.selector.SelectorNetworkHandler
import net.mamoe.mirai.internal.network.handler.state.CombinedStateObserver.Companion.plus
import net.mamoe.mirai.internal.network.handler.state.LoggingStateObserver
import net.mamoe.mirai.internal.network.handler.state.StateChangedObserver
import net.mamoe.mirai.internal.network.handler.state.StateObserver
import net.mamoe.mirai.internal.network.handler.state.safe
@ -116,7 +118,7 @@ internal open class QQAndroidBot constructor(
}
}
},
).safe(logger.subLogger("StateObserver"))
).safe(logger.subLogger("StateObserver")) + LoggingStateObserver.createLoggingIfEnabled()
}

View File

@ -13,13 +13,23 @@ import net.mamoe.mirai.internal.network.handler.NetworkHandler
import net.mamoe.mirai.internal.network.handler.NetworkHandlerSupport
import net.mamoe.mirai.utils.MiraiLogger
import net.mamoe.mirai.utils.debug
import net.mamoe.mirai.utils.systemProp
internal class LoggingStateObserver(
val logger: MiraiLogger,
private val showStacktrace: Boolean = false
) : StateObserver {
override fun toString(): String {
return "LoggingStateObserver"
override fun toString(): String = "LoggingStateObserver(logger=${logger.identity})"
override fun beforeStateChanged(
networkHandler: NetworkHandlerSupport,
previous: NetworkHandlerSupport.BaseStateImpl,
new: NetworkHandlerSupport.BaseStateImpl
) {
logger.debug(
{ "Before change: ${previous.correspondingState} -> ${new.correspondingState}" },
if (showStacktrace) Exception("Show stacktrace") else null
)
}
override fun stateChanged(
@ -59,4 +69,27 @@ internal class LoggingStateObserver(
}
)
}
companion object {
fun createLoggingIfEnabled(): StateObserver? {
return when (systemProp(
"mirai.debug.network.state.observer.logging",
"off"
).lowercase()) {
"full" -> {
SafeStateObserver(
LoggingStateObserver(MiraiLogger.create("States"), true),
MiraiLogger.create("LoggingStateObserver errors")
)
}
"on", "true" -> {
SafeStateObserver(
LoggingStateObserver(MiraiLogger.create("States"), false),
MiraiLogger.create("LoggingStateObserver errors")
)
}
else -> null
}
}
}
}

View File

@ -12,8 +12,6 @@ package net.mamoe.mirai.internal.network.handler.state
import net.mamoe.mirai.internal.network.component.ComponentKey
import net.mamoe.mirai.internal.network.handler.NetworkHandler
import net.mamoe.mirai.internal.network.handler.NetworkHandlerSupport
import net.mamoe.mirai.utils.MiraiLogger
import net.mamoe.mirai.utils.systemProp
/**
* Observer of state changes.
@ -76,27 +74,5 @@ internal interface StateObserver {
fun chainOfNotNull(
vararg observers: StateObserver?,
): StateObserver = CombinedStateObserver(observers.filterNotNull())
val LOGGING: StateObserver? = when (systemProp(
"mirai.debug.network.state.observer.logging",
"off"
).lowercase()) {
"full" -> {
SafeStateObserver(
LoggingStateObserver(MiraiLogger.create("States"), true),
MiraiLogger.create("LoggingStateObserver errors")
)
}
"off", "false" -> {
null
}
"on", "true" -> {
SafeStateObserver(
LoggingStateObserver(MiraiLogger.create("States"), false),
MiraiLogger.create("LoggingStateObserver errors")
)
}
else -> null
}
}
}