refactor(dingtalk): improve logging with structured fields

Convert format string logging to structured key-value logging for
better log parsing and analysis in health check and recovery functions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
fishtrees 2026-03-09 16:04:27 +08:00
parent 232abb4922
commit 3f96ccaec9

View file

@ -128,10 +128,14 @@ func (c *DingTalkChannel) checkAndRecover() {
silenceDuration := time.Since(c.lastMessageTime) silenceDuration := time.Since(c.lastMessageTime)
c.mu.RUnlock() c.mu.RUnlock()
logger.DebugCF("dingtalk", "Health check: silence duration %v", silenceDuration) logger.DebugCF("dingtalk", "Health check: silence duration", map[string]any{"duration": silenceDuration})
if silenceDuration >= maxSilenceDuration { if silenceDuration >= maxSilenceDuration {
logger.InfoCF("dingtalk", "Connection appears stale (no messages for %v), triggering recovery", silenceDuration) logger.InfoCF(
"dingtalk",
"Connection appears stale (no messages for configured duration), triggering recovery",
map[string]any{"silenceDuration": silenceDuration},
)
c.recoverConnection() c.recoverConnection()
} }
} }
@ -155,14 +159,18 @@ func (c *DingTalkChannel) recoverConnection() {
err := c.startStreamClient() err := c.startStreamClient()
if err == nil { if err == nil {
logger.InfoCF("dingtalk", "Connection recovered successfully") logger.InfoCF("dingtalk", "Connection recovered successfully", map[string]any{})
c.mu.Lock() c.mu.Lock()
c.lastMessageTime = time.Now() c.lastMessageTime = time.Now()
c.mu.Unlock() c.mu.Unlock()
return return
} }
logger.WarnCF("dingtalk", "Recovery failed: %v, retrying in %v", err, recoveryRetryDelay) logger.WarnCF(
"dingtalk",
"Recovery failed, retrying",
map[string]any{"error": err, "retryDelay": recoveryRetryDelay},
)
time.Sleep(recoveryRetryDelay) time.Sleep(recoveryRetryDelay)
} }
} }