add debug log for headers and body of Azure OpenAI requests

This commit is contained in:
Feng Yue
2025-08-30 19:25:06 +08:00
parent 92f4fbcef3
commit 70c8cb5aff
2 changed files with 78 additions and 75 deletions

View File

@@ -157,6 +157,16 @@ router.post('/chat/completions', authenticateApiKey, async (req, res) => {
messages: req.body.messages?.length || 0 messages: req.body.messages?.length || 0
}) })
// Detailed logging for debugging - INCLUDING SENSITIVE DATA
logger.debug(`📋 Azure OpenAI Chat Request Details ${requestId}`, {
completeHeaders: req.headers,
fullRequestBody: req.body,
clientIP: req.ip || req.connection?.remoteAddress,
method: req.method,
originalUrl: req.originalUrl,
query: req.query
})
try { try {
// 获取绑定的 Azure OpenAI 账户 // 获取绑定的 Azure OpenAI 账户
let account = null let account = null
@@ -250,26 +260,14 @@ router.post('/responses', authenticateApiKey, async (req, res) => {
messages: req.body.messages?.length || 0 messages: req.body.messages?.length || 0
}) })
// Detailed logging for debugging // Detailed logging for debugging - INCLUDING SENSITIVE DATA
logger.debug(`📋 Azure OpenAI Responses Request Details ${requestId}`, { logger.debug(`📋 Azure OpenAI Responses Request Details ${requestId}`, {
headers: { completeHeaders: req.headers,
'content-type': req.headers['content-type'], fullRequestBody: req.body,
'user-agent': req.headers['user-agent'], clientIP: req.ip || req.connection?.remoteAddress,
'x-forwarded-for': req.headers['x-forwarded-for'], method: req.method,
'authorization': req.headers.authorization ? '[REDACTED]' : 'not present' originalUrl: req.originalUrl,
}, query: req.query
requestBody: {
model: req.body.model,
messages: req.body.messages,
stream: req.body.stream,
temperature: req.body.temperature,
max_tokens: req.body.max_tokens,
top_p: req.body.top_p,
frequency_penalty: req.body.frequency_penalty,
presence_penalty: req.body.presence_penalty,
stop: req.body.stop,
logit_bias: req.body.logit_bias
}
}) })
try { try {
@@ -378,6 +376,16 @@ router.post('/embeddings', authenticateApiKey, async (req, res) => {
input: Array.isArray(req.body.input) ? req.body.input.length : 1 input: Array.isArray(req.body.input) ? req.body.input.length : 1
}) })
// Detailed logging for debugging - INCLUDING SENSITIVE DATA
logger.debug(`📋 Azure OpenAI Embeddings Request Details ${requestId}`, {
completeHeaders: req.headers,
fullRequestBody: req.body,
clientIP: req.ip || req.connection?.remoteAddress,
method: req.method,
originalUrl: req.originalUrl,
query: req.query
})
try { try {
// 获取绑定的 Azure OpenAI 账户 // 获取绑定的 Azure OpenAI 账户
let account = null let account = null

View File

@@ -52,24 +52,22 @@ async function handleAzureOpenAIRequest({
// 处理请求体 // 处理请求体
const processedBody = { ...requestBody } const processedBody = { ...requestBody }
// Detailed logging for responses endpoint // Detailed logging for all endpoints - INCLUDING SENSITIVE DATA
if (endpoint === 'responses') { logger.debug(`🔍 Azure OpenAI ${endpoint.toUpperCase()} Complete Request Details`, {
logger.debug(`🔍 Azure OpenAI Responses Endpoint Details`, { targetUrl: requestUrl,
targetUrl: requestUrl, completeHeaders: requestHeaders,
headers: { fullProcessedRequestBody: processedBody,
'Content-Type': requestHeaders['Content-Type'], account: {
'api-key': '[REDACTED]', id: account.id,
'User-Agent': requestHeaders['User-Agent'] || 'not set' name: account.name,
}, azureEndpoint: account.azureEndpoint,
processedRequestBody: processedBody, deploymentName: account.deploymentName,
account: { apiVersion: apiVersion,
name: account.name, apiKeyPreview: account.apiKey ? account.apiKey.substring(0, 10) + '...' : 'not set'
azureEndpoint: account.azureEndpoint, },
deploymentName: account.deploymentName, endpoint: endpoint,
apiVersion: apiVersion originalRequestBody: requestBody
} })
})
}
// 标准化模型名称 // 标准化模型名称
if (processedBody.model) { if (processedBody.model) {
@@ -129,18 +127,13 @@ async function handleAzureOpenAIRequest({
requestBodySize: JSON.stringify(processedBody).length requestBodySize: JSON.stringify(processedBody).length
}) })
logger.debug('Azure OpenAI request headers', { logger.debug('Azure OpenAI Complete Request Headers - INCLUDING SENSITIVE DATA', {
'content-type': requestHeaders['Content-Type'], allHeaders: requestHeaders
'user-agent': requestHeaders['user-agent'] || 'not-set',
customHeaders: Object.keys(requestHeaders).filter(
(key) => !['Content-Type', 'user-agent'].includes(key)
)
}) })
logger.debug('Azure OpenAI request body', { logger.debug('Azure OpenAI Complete Request Body - INCLUDING SENSITIVE DATA', {
model: processedBody.model, fullRequestBody: processedBody,
messages: processedBody.messages?.length || 0, requestBodySize: JSON.stringify(processedBody).length
otherParams: Object.keys(processedBody).filter((key) => !['model', 'messages'].includes(key))
}) })
const requestStartTime = Date.now() const requestStartTime = Date.now()
@@ -161,24 +154,17 @@ async function handleAzureOpenAIRequest({
contentType: response.headers?.['content-type'] || 'unknown' contentType: response.headers?.['content-type'] || 'unknown'
}) })
// Enhanced logging for responses endpoint // Enhanced logging for all endpoints - INCLUDING SENSITIVE DATA
if (endpoint === 'responses') { logger.debug(`🔍 Azure OpenAI ${endpoint.toUpperCase()} Complete Response`, {
logger.debug(`🔍 Azure OpenAI Responses Endpoint Response`, { status: response.status,
status: response.status, statusText: response.statusText,
statusText: response.statusText, completeResponseHeaders: response.headers,
headers: { fullResponseBody: isStream ? '[STREAM - Cannot capture stream data]' : response.data,
'content-type': response.headers['content-type'], responseDataType: typeof response.data,
'x-request-id': response.headers['x-request-id'] || response.headers['x-ms-request-id'], responseSize: response.headers['content-length'] || 'unknown',
'x-ratelimit-remaining': response.headers['x-ratelimit-remaining-requests'], endpoint: endpoint,
'x-ratelimit-reset': response.headers['x-ratelimit-reset-requests'] duration: `${requestDuration}ms`
}, })
responseBodyPreview: isStream ? '[STREAM]' : (
response.data ? JSON.stringify(response.data).substring(0, 500) + (JSON.stringify(response.data).length > 500 ? '...' : '') : 'no data'
),
endpoint: 'responses',
duration: `${requestDuration}ms`
})
}
return response return response
} catch (error) { } catch (error) {
@@ -245,16 +231,25 @@ async function handleAzureOpenAIRequest({
logger.error('Azure OpenAI Request Failed', errorDetails) logger.error('Azure OpenAI Request Failed', errorDetails)
} }
// Enhanced error logging for responses endpoint // Enhanced error logging for all endpoints - INCLUDING SENSITIVE DATA
if (endpoint === 'responses') { logger.error(`❌ Azure OpenAI ${endpoint.toUpperCase()} Complete Error Details`, {
logger.error(`❌ Azure OpenAI Responses Endpoint Error`, { ...errorDetails,
...errorDetails, endpoint: endpoint,
endpoint: 'responses', targetUrl: requestUrl,
targetUrl: requestUrl, errorType: error.response ? 'HTTP_ERROR' : 'NETWORK_ERROR',
errorType: error.response ? 'HTTP_ERROR' : 'NETWORK_ERROR', completeRequestHeaders: requestHeaders,
responseBody: error.response?.data ? JSON.stringify(error.response.data) : 'no response body' fullRequestBody: processedBody,
}) completeResponseHeaders: error.response?.headers,
} fullResponseBody: error.response?.data,
account: {
id: account.id,
name: account.name,
azureEndpoint: account.azureEndpoint,
deploymentName: account.deploymentName,
apiVersion: account.apiVersion,
fullApiKey: account.apiKey
}
})
throw error throw error
} }