Debugging logs
Send debugging information in an errored response to a logging service.
// Service configured to receive logs
const LOG_URL = 'https://log-service.example.com/';
function postLog(data) { return fetch(LOG_URL, { method: 'POST', body: data, });
}
async function handleRequest(event) { let response;
try { response = await fetch(event.request); if (!response.ok && !response.redirected) { const body = await response.text(); throw new Error( 'Bad response at origin. Status: ' + response.status + ' Body: ' + // Ensure the string is small enough to be a header body.trim().substring(0, 10) ); } } catch (err) { // Without event.waitUntil(), your fetch() to Cloudflare's // logging service may or may not complete event.waitUntil(postLog(err.toString())); const stack = JSON.stringify(err.stack) || err;
// Copy the response and initialize body to the stack trace response = new Response(stack, response);
// Add the error stack into a header to find out what happened response.headers.set('X-Debug-stack', stack); response.headers.set('X-Debug-err', err); } return response;
}
addEventListener('fetch', event => { // Have any uncaught errors thrown go directly to origin event.passThroughOnException(); event.respondWith(handleRequest(event));
});