fix: improve logging for client disconnections in relay services

当客户端主动断开连接时,改为使用 INFO 级别记录而不是 ERROR 级别,
因为这是正常情况而非错误。

- ccrRelayService: 区分客户端断开与实际错误
- claudeConsoleRelayService: 区分客户端断开与实际错误
- claudeRelayService: 区分客户端断开与实际错误
- droidRelayService: 区分客户端断开与实际错误
This commit is contained in:
QTom
2025-12-10 14:18:44 +08:00
committed by QTom
parent cb94a4260e
commit 8901994644
4 changed files with 31 additions and 7 deletions

View File

@@ -448,7 +448,14 @@ class CcrRelayService {
// 更新最后使用时间 // 更新最后使用时间
await this._updateLastUsedTime(accountId) await this._updateLastUsedTime(accountId)
} catch (error) { } catch (error) {
logger.error(`❌ CCR stream relay failed (Account: ${account?.name || accountId}):`, error) // 客户端主动断开连接是正常情况,使用 INFO 级别
if (error.message === 'Client disconnected') {
logger.info(
`🔌 CCR stream relay ended: Client disconnected (Account: ${account?.name || accountId})`
)
} else {
logger.error(`❌ CCR stream relay failed (Account: ${account?.name || accountId}):`, error)
}
throw error throw error
} finally { } finally {
// 📬 释放用户消息队列锁 // 📬 释放用户消息队列锁

View File

@@ -635,10 +635,17 @@ class ClaudeConsoleRelayService {
// 更新最后使用时间 // 更新最后使用时间
await this._updateLastUsedTime(accountId) await this._updateLastUsedTime(accountId)
} catch (error) { } catch (error) {
logger.error( // 客户端主动断开连接是正常情况,使用 INFO 级别
`❌ Claude Console stream relay failed (Account: ${account?.name || accountId}):`, if (error.message === 'Client disconnected') {
error logger.info(
) `🔌 Claude Console stream relay ended: Client disconnected (Account: ${account?.name || accountId})`
)
} else {
logger.error(
`❌ Claude Console stream relay failed (Account: ${account?.name || accountId}):`,
error
)
}
throw error throw error
} finally { } finally {
// 🛑 清理租约刷新定时器 // 🛑 清理租约刷新定时器

View File

@@ -1428,7 +1428,12 @@ class ClaudeRelayService {
isDedicatedOfficialAccount isDedicatedOfficialAccount
) )
} catch (error) { } catch (error) {
logger.error(`❌ Claude stream relay with usage capture failed:`, error) // 客户端主动断开连接是正常情况,使用 INFO 级别
if (error.message === 'Client disconnected') {
logger.info(`🔌 Claude stream relay ended: Client disconnected`)
} else {
logger.error(`❌ Claude stream relay with usage capture failed:`, error)
}
throw error throw error
} finally { } finally {
// 📬 释放用户消息队列锁 // 📬 释放用户消息队列锁

View File

@@ -336,7 +336,12 @@ class DroidRelayService {
) )
} }
} catch (error) { } catch (error) {
logger.error(`❌ Droid relay error: ${error.message}`, error) // 客户端主动断开连接是正常情况,使用 INFO 级别
if (error.message === 'Client disconnected') {
logger.info(`🔌 Droid relay ended: Client disconnected`)
} else {
logger.error(`❌ Droid relay error: ${error.message}`, error)
}
const status = error?.response?.status const status = error?.response?.status
if (status >= 400 && status < 500) { if (status >= 400 && status < 500) {