mirror of
https://github.com/mamoe/mirai.git
synced 2025-03-23 22:00:10 +08:00
Add MiraiLogger.withSwitch
This commit is contained in:
parent
2b477b3be7
commit
7771856a4a
@ -6,6 +6,7 @@ import kotlinx.coroutines.*
|
||||
import net.mamoe.mirai.event.internal.broadcastInternal
|
||||
import net.mamoe.mirai.utils.DefaultLogger
|
||||
import net.mamoe.mirai.utils.MiraiLogger
|
||||
import net.mamoe.mirai.utils.withSwitch
|
||||
import kotlin.coroutines.CoroutineContext
|
||||
import kotlin.coroutines.EmptyCoroutineContext
|
||||
import kotlin.jvm.JvmOverloads
|
||||
@ -46,14 +47,15 @@ abstract class Event : Subscribable {
|
||||
|
||||
init {
|
||||
if (EventDebuggingFlag) {
|
||||
EventLogger.debug(this::class.simpleName + " created")
|
||||
EventDebugLogger.debug(this::class.simpleName + " created")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal object EventLogger : MiraiLogger by DefaultLogger("Event")
|
||||
internal object EventDebugLogger : MiraiLogger by DefaultLogger("Event").withSwitch(EventDebuggingFlag)
|
||||
|
||||
private val EventDebuggingFlag: Boolean by lazy {
|
||||
// avoid 'Condition is always true'
|
||||
false
|
||||
}
|
||||
|
||||
@ -76,14 +78,14 @@ interface Cancellable : Subscribable {
|
||||
@JvmOverloads
|
||||
suspend fun <E : Subscribable> E.broadcast(context: CoroutineContext = EmptyCoroutineContext): E {
|
||||
if (EventDebuggingFlag) {
|
||||
EventLogger.debug(this::class.simpleName + " pre broadcast")
|
||||
EventDebugLogger.debug(this::class.simpleName + " pre broadcast")
|
||||
}
|
||||
try {
|
||||
@Suppress("EXPERIMENTAL_API_USAGE")
|
||||
return withContext(EventScope.newCoroutineContext(context)) { this@broadcast.broadcastInternal() }
|
||||
} finally {
|
||||
if (EventDebuggingFlag) {
|
||||
EventLogger.debug(this::class.simpleName + " after broadcast")
|
||||
EventDebugLogger.debug(this::class.simpleName + " after broadcast")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5,7 +5,7 @@ import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.sync.Mutex
|
||||
import kotlinx.coroutines.sync.withLock
|
||||
import net.mamoe.mirai.Bot
|
||||
import net.mamoe.mirai.event.EventLogger
|
||||
import net.mamoe.mirai.event.EventDebugLogger
|
||||
import net.mamoe.mirai.event.EventScope
|
||||
import net.mamoe.mirai.event.ListeningStatus
|
||||
import net.mamoe.mirai.event.Subscribable
|
||||
@ -27,7 +27,7 @@ internal suspend fun <E : Subscribable> KClass<E>.subscribeInternal(listener: Li
|
||||
if (mainMutex.tryLock(listener)) {//能锁则代表这个事件目前没有正在广播.
|
||||
try {
|
||||
add(listener)//直接修改主监听者列表
|
||||
EventLogger.debug("Added a listener to ${this@subscribeInternal.simpleName}")
|
||||
EventDebugLogger.debug("Added a listener to ${this@subscribeInternal.simpleName}")
|
||||
} finally {
|
||||
mainMutex.unlock(listener)
|
||||
}
|
||||
@ -37,7 +37,7 @@ internal suspend fun <E : Subscribable> KClass<E>.subscribeInternal(listener: Li
|
||||
//不能锁住, 则这个事件正在广播, 那么要将新的监听者放入缓存
|
||||
cacheMutex.withLock {
|
||||
cache.add(listener)
|
||||
EventLogger.debug("Added a listener to cache of ${this@subscribeInternal.simpleName}")
|
||||
EventDebugLogger.debug("Added a listener to cache of ${this@subscribeInternal.simpleName}")
|
||||
}
|
||||
|
||||
EventScope.launch {
|
||||
@ -48,7 +48,7 @@ internal suspend fun <E : Subscribable> KClass<E>.subscribeInternal(listener: Li
|
||||
if (cache.size != 0) {
|
||||
addAll(cache)
|
||||
cache.clear()
|
||||
EventLogger.debug("Cache of ${this@subscribeInternal.simpleName} is now transferred to main")
|
||||
EventDebugLogger.debug("Cache of ${this@subscribeInternal.simpleName} is now transferred to main")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -19,6 +19,11 @@ var DefaultLogger: (identity: String?) -> MiraiLogger = { PlatformLogger() }
|
||||
*/
|
||||
expect open class PlatformLogger @JvmOverloads internal constructor(identity: String? = "Mirai") : MiraiLoggerPlatformBase
|
||||
|
||||
/**
|
||||
* 给这个 logger 添加一个开关, 用于控制是否记录 log
|
||||
*/
|
||||
@JvmOverloads
|
||||
fun MiraiLogger.withSwitch(default: Boolean = true): MiraiLoggerWithSwitch = MiraiLoggerWithSwitch(this, default)
|
||||
|
||||
/**
|
||||
* 日志记录器. 所有的输出均依赖于它.
|
||||
@ -161,9 +166,45 @@ class SimpleLogger(override val identity: String?, private val logger: (String?,
|
||||
}
|
||||
|
||||
/**
|
||||
* 平台基类.
|
||||
* 带有开关的 Logger. 仅能通过 [MiraiLogger.withSwitch] 构造
|
||||
*
|
||||
* @see enable 开启
|
||||
* @see disable 关闭
|
||||
*/
|
||||
@Suppress("MemberVisibilityCanBePrivate")
|
||||
class MiraiLoggerWithSwitch internal constructor(private val delegate: MiraiLogger, default: Boolean) : MiraiLoggerPlatformBase() {
|
||||
override val identity: String? get() = delegate.identity
|
||||
|
||||
private var switch: Boolean = default
|
||||
|
||||
fun enable() {
|
||||
switch = true
|
||||
}
|
||||
|
||||
fun disable() {
|
||||
switch = false
|
||||
}
|
||||
|
||||
override fun verbose0(any: Any?) = delegate.verbose(any)
|
||||
override fun verbose0(message: String?, e: Throwable?) = delegate.verbose(message, e)
|
||||
override fun debug0(any: Any?) = delegate.debug(any)
|
||||
override fun debug0(message: String?, e: Throwable?) = delegate.debug(message, e)
|
||||
override fun info0(any: Any?) = delegate.info(any)
|
||||
override fun info0(message: String?, e: Throwable?) = delegate.info(message, e)
|
||||
override fun warning0(any: Any?) = delegate.warning(any)
|
||||
override fun warning0(message: String?, e: Throwable?) = delegate.warning(message, e)
|
||||
override fun error0(any: Any?) = delegate.error(any)
|
||||
override fun error0(message: String?, e: Throwable?) = delegate.error(message, e)
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 平台日志基类.
|
||||
* 实现了 [follower] 的调用传递.
|
||||
* 若要自行实现日志记录, 请优先考虑继承 [PlatformLogger]
|
||||
*
|
||||
* 若要自行实现日志记录, 请优先考虑继承 [PlatformLogger].
|
||||
*
|
||||
* 它不应该被用作变量的类型定义. 只应被继承
|
||||
*/
|
||||
abstract class MiraiLoggerPlatformBase : MiraiLogger {
|
||||
final override var follower: MiraiLogger? = null
|
||||
|
Loading…
Reference in New Issue
Block a user