log primary and secondary responses

This commit is contained in:
Para Dox
2025-06-01 20:59:56 +07:00
parent fcdee01608
commit 8ac43fdbac
3 changed files with 46 additions and 7 deletions

View File

@@ -18,6 +18,7 @@ const config = {
// Logging
logMismatches: process.env.LOG_MISMATCHES !== 'false', // default true
logAllMismatchedResponses: process.env.LOG_ALL_MISMATCHED_RESPONSES === 'true', // default false
// Server
port: parseInt(process.env.PORT || '8545', 10),

View File

@@ -17,6 +17,9 @@ SIZE_DIFF_THRESHOLD=100
# Whether to log mismatches
LOG_MISMATCHES=true
# Whether to log full responses for ALL mismatches (not just size differences)
LOG_ALL_MISMATCHED_RESPONSES=false
# Server port
PORT=8545

View File

@@ -423,30 +423,65 @@ class RPCProxy {
const logEntry = {
requestId,
method: requestBody.method,
request: requestBody, // Include the original request for context
mismatches,
streamEndpoint: this.streamEndpoint,
compareEndpoint: this.compareEndpoint,
};
// Include full compare response if size differs significantly
if (sizeDiff > config.sizeDiffThreshold) {
// Include full responses if there's any mismatch (not just size)
// This helps debug status code mismatches, timeouts, etc.
const shouldLogResponses = sizeDiff > config.sizeDiffThreshold ||
streamResponse.statusCode !== compareResponse.statusCode ||
(config.logAllMismatchedResponses === true);
if (shouldLogResponses) {
try {
logEntry.compareResponseData = JSON.parse(compareResponse.data);
logEntry.streamResponseData = JSON.parse(streamResponse.data);
// Try to parse as JSON for better readability
logEntry.streamResponse = {
statusCode: streamResponse.statusCode,
size: streamResponse.size,
data: streamResponse.data ? JSON.parse(streamResponse.data) : null
};
logEntry.compareResponse = {
statusCode: compareResponse.statusCode,
size: compareResponse.size,
data: compareResponse.data ? JSON.parse(compareResponse.data) : null
};
} catch (e) {
// If not valid JSON, include raw data
logEntry.compareResponseData = compareResponse.data;
logEntry.streamResponseData = streamResponse.data;
logEntry.streamResponse = {
statusCode: streamResponse.statusCode,
size: streamResponse.size,
data: streamResponse.data
};
logEntry.compareResponse = {
statusCode: compareResponse.statusCode,
size: compareResponse.size,
data: compareResponse.data
};
}
// Log a summary for easier reading
logger.warn({
requestId,
method: requestBody.method,
mismatchTypes: mismatches.map(m => m.type),
streamEndpoint: this.streamEndpoint,
compareEndpoint: this.compareEndpoint,
}, 'Response mismatch detected - full details below');
}
logger.warn(logEntry, 'Response mismatch detected');
// Log the full entry with all details
logger.warn(logEntry, 'Response mismatch details');
} else {
logger.debug({
requestId,
method: requestBody.method,
streamLatency: streamResponse.latency,
compareLatency: compareResponse.latency,
streamSize: streamResponse.size,
compareSize: compareResponse.size,
}, 'Responses match');
}
}