diff --git a/mirai-core/src/commonMain/kotlin/contact/AbstractUser.kt b/mirai-core/src/commonMain/kotlin/contact/AbstractUser.kt
index 2b0882374..678ae282d 100644
--- a/mirai-core/src/commonMain/kotlin/contact/AbstractUser.kt
+++ b/mirai-core/src/commonMain/kotlin/contact/AbstractUser.kt
@@ -250,8 +250,10 @@ internal suspend fun <C : User> SendMessageHandler<out C>.sendMessageImpl(
     val result = this
         .runCatching { sendMessage(message, chain, SendMessageStep.FIRST) }
 
-    // logMessageSent(result.getOrNull()?.source?.plus(chain) ?: chain) // log with source
-    contact.logMessageSent(chain)
+    if (result.isSuccess) {
+        // logMessageSent(result.getOrNull()?.source?.plus(chain) ?: chain) // log with source
+        contact.logMessageSent(chain)
+    }
 
     postSendEventConstructor(contact, chain, result.exceptionOrNull(), result.getOrNull()).broadcast()
 
diff --git a/mirai-core/src/commonMain/kotlin/contact/GroupImpl.kt b/mirai-core/src/commonMain/kotlin/contact/GroupImpl.kt
index 420854247..1b69cc102 100644
--- a/mirai-core/src/commonMain/kotlin/contact/GroupImpl.kt
+++ b/mirai-core/src/commonMain/kotlin/contact/GroupImpl.kt
@@ -162,8 +162,10 @@ internal class GroupImpl constructor(
         val result = GroupSendMessageHandler(this)
             .runCatching { sendMessage(message, chain, SendMessageStep.FIRST) }
 
-        // logMessageSent(result.getOrNull()?.source?.plus(chain) ?: chain) // log with source
-        logMessageSent(chain)
+        if (result.isSuccess) {
+            // logMessageSent(result.getOrNull()?.source?.plus(chain) ?: chain) // log with source
+            logMessageSent(chain)
+        }
 
         GroupMessagePostSendEvent(this, chain, result.exceptionOrNull(), result.getOrNull()).broadcast()