Web サイト上で JavaScript のエラーが発生した時、エラーログに残るとうれしいです。しかしながらこういった時の JavaScript はブラウザ上で動いており、基本的にブラウザ上でエラーも完結します。そこでエラー発生時に自動でその内容を API に投げ、API の中でエラー内容を保存することを考えます。これは次のコードでできます。
<script>
/**
* @see https://developer.mozilla.org/ja/docs/Web/API/Window/error_event
* @param message
* @param file
* @param lineNo
* @param colNo
* @param error
*/
window.onerror = function (message, file, lineNo, colNo, error) {
// エラーイベントが発生したらその内容をエラーログ保存APIに投げる
fetch("/api/logging/error", {
method: "POST",
headers: {
"Content-Type": "application/json", // fetch API で JSON 形式のリクエストを投げる
"X-CSRF-TOKEN": "{{ csrf_token() }}",// Laravel 用
},
// 送信内容はエラー内容とどのブラウザで問題が起きるか
body: JSON.stringify({
message, file, lineNo, colNo, error,
userAgent: window.navigator.userAgent,
})
}).catch(e => {
// エラーログ保存でエラーが起きた場合はその旨をコンソールに出力
console.error(e);
});
}
</script>
axios 等の外部パッケージ抜きで動く小さなコードです。