Merge pull request #382 from Edric-Li/feat/add-account-info-to-error-logs

feat: 在错误日志中添加账号信息
This commit is contained in:
Wesley Liddick
2025-09-09 12:26:45 +08:00
committed by GitHub
3 changed files with 52 additions and 24 deletions

View File

@@ -537,7 +537,7 @@ class Application {
logger.info( logger.info(
`🔄 Cleanup tasks scheduled every ${config.system.cleanupInterval / 1000 / 60} minutes` `🔄 Cleanup tasks scheduled every ${config.system.cleanupInterval / 1000 / 60} minutes`
) )
// 🚨 启动限流状态自动清理服务 // 🚨 启动限流状态自动清理服务
// 每5分钟检查一次过期的限流状态确保账号能及时恢复调度 // 每5分钟检查一次过期的限流状态确保账号能及时恢复调度
const rateLimitCleanupService = require('./services/rateLimitCleanupService') const rateLimitCleanupService = require('./services/rateLimitCleanupService')
@@ -563,7 +563,7 @@ class Application {
} catch (error) { } catch (error) {
logger.error('❌ Error cleaning up pricing service:', error) logger.error('❌ Error cleaning up pricing service:', error)
} }
// 停止限流清理服务 // 停止限流清理服务
try { try {
const rateLimitCleanupService = require('./services/rateLimitCleanupService') const rateLimitCleanupService = require('./services/rateLimitCleanupService')

View File

@@ -19,10 +19,11 @@ class ClaudeConsoleRelayService {
options = {} options = {}
) { ) {
let abortController = null let abortController = null
let account = null
try { try {
// 获取账户信息 // 获取账户信息
const account = await claudeConsoleAccountService.getAccount(accountId) account = await claudeConsoleAccountService.getAccount(accountId)
if (!account) { if (!account) {
throw new Error('Claude Console Claude account not found') throw new Error('Claude Console Claude account not found')
} }
@@ -222,7 +223,10 @@ class ClaudeConsoleRelayService {
throw new Error('Client disconnected') throw new Error('Client disconnected')
} }
logger.error('❌ Claude Console Claude relay request failed:', error.message) logger.error(
`❌ Claude Console relay request failed (Account: ${account?.name || accountId}):`,
error.message
)
// 不再因为模型不支持而block账号 // 不再因为模型不支持而block账号
@@ -241,9 +245,10 @@ class ClaudeConsoleRelayService {
streamTransformer = null, streamTransformer = null,
options = {} options = {}
) { ) {
let account = null
try { try {
// 获取账户信息 // 获取账户信息
const account = await claudeConsoleAccountService.getAccount(accountId) account = await claudeConsoleAccountService.getAccount(accountId)
if (!account) { if (!account) {
throw new Error('Claude Console Claude account not found') throw new Error('Claude Console Claude account not found')
} }
@@ -297,7 +302,10 @@ class ClaudeConsoleRelayService {
// 更新最后使用时间 // 更新最后使用时间
await this._updateLastUsedTime(accountId) await this._updateLastUsedTime(accountId)
} catch (error) { } catch (error) {
logger.error('❌ Claude Console Claude stream relay failed:', error) logger.error(
`❌ Claude Console stream relay failed (Account: ${account?.name || accountId}):`,
error
)
throw error throw error
} }
} }
@@ -376,7 +384,9 @@ class ClaudeConsoleRelayService {
// 错误响应处理 // 错误响应处理
if (response.status !== 200) { if (response.status !== 200) {
logger.error(`❌ Claude Console API returned error status: ${response.status}`) logger.error(
`❌ Claude Console API returned error status: ${response.status} | Account: ${account?.name || accountId}`
)
if (response.status === 401) { if (response.status === 401) {
claudeConsoleAccountService.markAccountUnauthorized(accountId) claudeConsoleAccountService.markAccountUnauthorized(accountId)
@@ -528,7 +538,10 @@ class ClaudeConsoleRelayService {
} }
} }
} catch (error) { } catch (error) {
logger.error('❌ Error processing Claude Console stream data:', error) logger.error(
`❌ Error processing Claude Console stream data (Account: ${account?.name || accountId}):`,
error
)
if (!responseStream.destroyed) { if (!responseStream.destroyed) {
responseStream.write('event: error\n') responseStream.write('event: error\n')
responseStream.write( responseStream.write(
@@ -570,7 +583,10 @@ class ClaudeConsoleRelayService {
}) })
response.data.on('error', (error) => { response.data.on('error', (error) => {
logger.error('❌ Claude Console stream error:', error) logger.error(
`❌ Claude Console stream error (Account: ${account?.name || accountId}):`,
error
)
if (!responseStream.destroyed) { if (!responseStream.destroyed) {
responseStream.write('event: error\n') responseStream.write('event: error\n')
responseStream.write( responseStream.write(
@@ -590,7 +606,10 @@ class ClaudeConsoleRelayService {
return return
} }
logger.error('❌ Claude Console Claude stream request error:', error.message) logger.error(
`❌ Claude Console stream request error (Account: ${account?.name || accountId}):`,
error.message
)
// 检查错误状态 // 检查错误状态
if (error.response) { if (error.response) {

View File

@@ -772,7 +772,7 @@ class ClaudeRelayService {
resolve(response) resolve(response)
} catch (error) { } catch (error) {
logger.error('❌ Failed to parse Claude API response:', error) logger.error(`❌ Failed to parse Claude API response (Account: ${accountId}):`, error)
reject(error) reject(error)
} }
}) })
@@ -785,7 +785,7 @@ class ClaudeRelayService {
req.on('error', async (error) => { req.on('error', async (error) => {
console.error(': ❌ ', error) console.error(': ❌ ', error)
logger.error('❌ Claude API request error:', error.message, { logger.error(`❌ Claude API request error (Account: ${accountId}):`, error.message, {
code: error.code, code: error.code,
errno: error.errno, errno: error.errno,
syscall: error.syscall, syscall: error.syscall,
@@ -812,7 +812,7 @@ class ClaudeRelayService {
req.on('timeout', async () => { req.on('timeout', async () => {
req.destroy() req.destroy()
logger.error('❌ Claude API request timeout') logger.error(`❌ Claude API request timeout (Account: ${accountId})`)
await this._handleServerError(accountId, 504, null, 'Request') await this._handleServerError(accountId, 504, null, 'Request')
@@ -920,7 +920,7 @@ class ClaudeRelayService {
options options
) )
} catch (error) { } catch (error) {
logger.error('❌ Claude stream relay with usage capture failed:', error) logger.error(`❌ Claude stream relay with usage capture failed:`, error)
throw error throw error
} }
} }
@@ -1067,7 +1067,9 @@ class ClaudeRelayService {
logger.error('❌ Error in stream error handler:', err) logger.error('❌ Error in stream error handler:', err)
}) })
logger.error(`❌ Claude API returned error status: ${res.statusCode}`) logger.error(
`❌ Claude API returned error status: ${res.statusCode} | Account: ${account?.name || accountId}`
)
let errorData = '' let errorData = ''
res.on('data', (chunk) => { res.on('data', (chunk) => {
@@ -1076,7 +1078,10 @@ class ClaudeRelayService {
res.on('end', () => { res.on('end', () => {
console.error(': ❌ ', errorData) console.error(': ❌ ', errorData)
logger.error('❌ Claude API error response:', errorData) logger.error(
`❌ Claude API error response (Account: ${account?.name || accountId}):`,
errorData
)
if (!responseStream.destroyed) { if (!responseStream.destroyed) {
// 发送错误事件 // 发送错误事件
responseStream.write('event: error\n') responseStream.write('event: error\n')
@@ -1408,11 +1413,15 @@ class ClaudeRelayService {
}) })
req.on('error', async (error) => { req.on('error', async (error) => {
logger.error('❌ Claude stream request error:', error.message, { logger.error(
code: error.code, `❌ Claude stream request error (Account: ${account?.name || accountId}):`,
errno: error.errno, error.message,
syscall: error.syscall {
}) code: error.code,
errno: error.errno,
syscall: error.syscall
}
)
// 根据错误类型提供更具体的错误信息 // 根据错误类型提供更具体的错误信息
let errorMessage = 'Upstream request failed' let errorMessage = 'Upstream request failed'
@@ -1456,7 +1465,7 @@ class ClaudeRelayService {
req.on('timeout', async () => { req.on('timeout', async () => {
req.destroy() req.destroy()
logger.error('❌ Claude stream request timeout') logger.error(`❌ Claude stream request timeout | Account: ${account?.name || accountId}`)
if (!responseStream.headersSent) { if (!responseStream.headersSent) {
responseStream.writeHead(504, { responseStream.writeHead(504, {
@@ -1558,7 +1567,7 @@ class ClaudeRelayService {
}) })
req.on('error', async (error) => { req.on('error', async (error) => {
logger.error('❌ Claude stream request error:', error.message, { logger.error(`❌ Claude stream request error:`, error.message, {
code: error.code, code: error.code,
errno: error.errno, errno: error.errno,
syscall: error.syscall syscall: error.syscall
@@ -1606,7 +1615,7 @@ class ClaudeRelayService {
req.on('timeout', async () => { req.on('timeout', async () => {
req.destroy() req.destroy()
logger.error('❌ Claude stream request timeout') logger.error(`❌ Claude stream request timeout`)
if (!responseStream.headersSent) { if (!responseStream.headersSent) {
responseStream.writeHead(504, { responseStream.writeHead(504, {