Skip to content

Debugging logs

Send debugging information in an errored response to a logging service.

// Replace with your actual logging service endpoint
const loggingEndpoint = "https://your-logging-endpoint";
export default {
async fetch(request) {
try {
// Attempt to fetch the request from the origin server
const response = await fetch(request.clone());
// Check if the response status indicates an error (for example, 4xx or 5xx)
if (!response.ok) {
// Prepare error details and context for logging
const errorDetails = {
status: response.status,
statusText: response.statusText,
url: request.url,
method: request.method,
headers: Object.fromEntries(request.headers),
};
// Log error details to your logging service
await logError(errorDetails);
// Return the original response with status and statusText intact
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers: response.headers,
});
}
// Return the successful response from the origin server
return response;
} catch (error) {
// Handle any exceptions that occur during fetch
const errorDetails = {
message: error.message,
stack: error.stack,
url: request.url,
method: request.method,
headers: Object.fromEntries(request.headers),
};
// Log error details to your logging service
await logError(errorDetails);
// Return a generic error response
return new Response("Internal Server Error", {
status: 500,
});
}
},
};
// Function to log error details to your logging service
async function logError(details) {
try {
const response = await fetch(loggingEndpoint, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(details),
});
if (!response.ok) {
console.error("Failed to log error:", response.statusText);
}
} catch (error) {
console.error("Error logging error:", error.message);
}
}