デバッグログ
エラー応答にデバッグ情報を送信してロギングサービスに送る。
// 実際のロギングサービスのエンドポイントに置き換えてください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); }}