コンテンツにスキップ

デバッグログ

エラー応答でデバッグ情報をロギングサービスに送信します。

export default {
async fetch(request, env, ctx) {
// ログを受信するように設定されたサービス
const LOG_URL = "https://log-service.example.com/";
async function postLog(data) {
return await fetch(LOG_URL, {
method: "POST",
body: data,
});
}
let response;
try {
response = await fetch(request);
if (!response.ok && !response.redirected) {
const body = await response.text();
throw new Error(
"オリジンでの不正な応答。ステータス: " +
response.status +
" 本文: " +
// 文字列がヘッダーとして小さすぎることを確認
body.trim().substring(0, 10),
);
}
} catch (err) {
// ctx.waitUntil()がないと、Cloudflareの
// ロギングサービスへのfetch()が完了するかどうかは不明
ctx.waitUntil(postLog(err.toString()));
const stack = JSON.stringify(err.stack) || err;
// 応答をコピーし、ボディをスタックトレースに初期化
response = new Response(stack, response);
// 何が起こったのかを知るためにエラースタックをヘッダーに追加
response.headers.set("X-Debug-stack", stack);
response.headers.set("X-Debug-err", err);
}
return response;
},
};