From 7593e348983b6c30f55d9e33fe4820d03ff34e40 Mon Sep 17 00:00:00 2001
From: Him188 <Him188@mamoe.net>
Date: Sun, 8 Mar 2020 20:09:53 +0800
Subject: [PATCH] Add standard output override

---
 .../net.mamoe.mirai/utils/MiraiLogger.kt      | 21 ++++++++++++++-----
 .../net/mamoe/mirai/utils/MiraiLoggerJvm.kt   | 11 ++++++----
 2 files changed, 23 insertions(+), 9 deletions(-)

diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/MiraiLogger.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/MiraiLogger.kt
index f912a8e0f..19303e301 100644
--- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/MiraiLogger.kt
+++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/MiraiLogger.kt
@@ -8,10 +8,14 @@
  */
 
 @file:Suppress("unused")
+@file:JvmMultifileClass
+@file:JvmName("Utils")
 
 package net.mamoe.mirai.utils
 
 import net.mamoe.mirai.Bot
+import kotlin.jvm.JvmMultifileClass
+import kotlin.jvm.JvmName
 import kotlin.jvm.JvmOverloads
 
 
@@ -204,7 +208,8 @@ inline fun MiraiLogger.error(lazyMessage: () -> String?, e: Throwable?) {
  *
  * 不应该直接构造这个类的实例. 请使用 [DefaultLogger], 或使用默认的顶层日志记录 [MiraiLogger.Companion]
  */
-expect open class PlatformLogger @JvmOverloads internal constructor(identity: String? = "Mirai") : MiraiLoggerPlatformBase
+expect open class PlatformLogger @JvmOverloads constructor(identity: String? = "Mirai") : MiraiLoggerPlatformBase
+
 
 /**
  * 不做任何事情的 logger, keep silent.
@@ -237,14 +242,19 @@ class SimpleLogger(
     }
 
     companion object {
-        inline operator fun invoke(crossinline logger: (message: String?, e: Throwable?) -> Unit): SimpleLogger = SimpleLogger(null, logger)
+        inline operator fun invoke(crossinline logger: (message: String?, e: Throwable?) -> Unit): SimpleLogger =
+            SimpleLogger(null, logger)
 
-        inline operator fun invoke(identity: String?, crossinline logger: (message: String?, e: Throwable?) -> Unit): SimpleLogger =
+        inline operator fun invoke(
+            identity: String?,
+            crossinline logger: (message: String?, e: Throwable?) -> Unit
+        ): SimpleLogger =
             SimpleLogger(identity) { _, message, e ->
                 logger(message, e)
             }
 
-        operator fun invoke(logger: (priority: LogPriority, message: String?, e: Throwable?) -> Unit): SimpleLogger = SimpleLogger(null, logger)
+        operator fun invoke(logger: (priority: LogPriority, message: String?, e: Throwable?) -> Unit): SimpleLogger =
+            SimpleLogger(null, logger)
     }
 
     override fun verbose0(message: String?) = logger(LogPriority.VERBOSE, message, null)
@@ -266,7 +276,8 @@ class SimpleLogger(
  * @see disable 关闭
  */
 @Suppress("MemberVisibilityCanBePrivate")
-class MiraiLoggerWithSwitch internal constructor(private val delegate: MiraiLogger, default: Boolean) : MiraiLoggerPlatformBase() {
+class MiraiLoggerWithSwitch internal constructor(private val delegate: MiraiLogger, default: Boolean) :
+    MiraiLoggerPlatformBase() {
     override val identity: String? get() = delegate.identity
 
     /**
diff --git a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/MiraiLoggerJvm.kt b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/MiraiLoggerJvm.kt
index 0f8bf91c6..1555c0741 100644
--- a/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/MiraiLoggerJvm.kt
+++ b/mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/MiraiLoggerJvm.kt
@@ -15,9 +15,12 @@ import java.util.*
 /**
  * JVM 控制台日志实现
  */
-actual open class PlatformLogger @JvmOverloads internal actual constructor(
-    override val identity: String?
+actual open class PlatformLogger @JvmOverloads constructor(
+    override val identity: String? = "Mirai",
+    val output: (String) -> Unit
 ) : MiraiLoggerPlatformBase() {
+    actual constructor(identity: String?) : this(identity, ::println)
+
     override fun verbose0(message: String?) = println(message, LoggerTextFormat.RESET)
     override fun verbose0(message: String?, e: Throwable?) {
         if (message != null) verbose(message.toString())
@@ -52,9 +55,9 @@ actual open class PlatformLogger @JvmOverloads internal actual constructor(
         val time = SimpleDateFormat("HH:mm:ss", Locale.SIMPLIFIED_CHINESE).format(Date())
 
         if (identity == null) {
-            println("$color$time : $value")
+            output("$color$time : $value")
         } else {
-            println("$color$identity $time : $value")
+            output("$color$identity $time : $value")
         }
     }
 }