コンテンツにスキップ

デバッグログ

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

// 実際のロギングサービスのエンドポイントに置き換えてください
const loggingEndpoint = "https://your-logging-endpoint";
export default {
async fetch(request) {
try {
// オリジンサーバーからリクエストを取得しようとする
const response = await fetch(request.clone());
// 応答のステータスがエラーを示しているか確認する(例えば、4xxまたは5xx)
if (!response.ok) {
// ロギングのためのエラー詳細とコンテキストを準備する
const errorDetails = {
status: response.status,
statusText: response.statusText,
url: request.url,
method: request.method,
headers: Object.fromEntries(request.headers),
};
// エラー詳細をロギングサービスに記録する
await logError(errorDetails);
// ステータスとステータステキストを保持したまま元の応答を返す
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers: response.headers,
});
}
// オリジンサーバーからの成功した応答を返す
return response;
} catch (error) {
// フェッチ中に発生した例外を処理する
const errorDetails = {
message: error.message,
stack: error.stack,
url: request.url,
method: request.method,
headers: Object.fromEntries(request.headers),
};
// エラー詳細をロギングサービスに記録する
await logError(errorDetails);
// 一般的なエラー応答を返す
return new Response("内部サーバーエラー", {
status: 500,
});
}
},
};
// エラー詳細をロギングサービスに記録するための関数
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("エラーのログ記録に失敗しました:", response.statusText);
}
} catch (error) {
console.error("エラーのログ記録中にエラーが発生しました:", error.message);
}
}