--- title: Error Reporting --- # Error Reporting [MODES: framework,data]

React Router catches errors in your route modules and sends them to [error boundaries](./error-boundary) to prevent blank pages when errors occur. However, `ErrorBoundary` isn't sufficient for logging and reporting errors. ## Server Errors [modes: framework] To access these caught errors on the server, use the `handleError` export of the server entry module. ### 1. Reveal the server entry If you don't see [`entry.server.tsx`][entryserver] in your app directory, you're using a default entry. Reveal it with this cli command: ```shellscript nonumber react-router reveal entry.server ``` ### 2. Export your error handler This function is called whenever React Router catches an error in your application on the server. ```tsx filename=entry.server.tsx import { type HandleErrorFunction } from "react-router"; export const handleError: HandleErrorFunction = ( error, { request }, ) => { // React Router may abort some interrupted requests, don't log those if (!request.signal.aborted) { myReportError(error); // make sure to still log the error so you can see it console.error(error); } }; ``` See also: - [`handleError`][handleError] ## Client Errors To access these caught errors on the client, use the `onError` prop on your [`HydratedRouter`][hydratedrouter] or [`RouterProvider`][routerprovider] component. ### Framework Mode [modes: framework] #### 1. Reveal the client entry If you don't see [`entry.client.tsx`][entryclient] in your app directory, you're using a default entry. Reveal it with this cli command: ```shellscript nonumber react-router reveal entry.client ``` #### 2. Add your error handler This function is called whenever React Router catches an error in your application on the client. ```tsx filename=entry.client.tsx import { type ClientOnErrorFunction } from "react-router"; const onError: ClientOnErrorFunction = ( error, { location, params, unstable_pattern, errorInfo }, ) => { myReportError(error, location, errorInfo); // make sure to still log the error so you can see it console.error(error, errorInfo); }; startTransition(() => { hydrateRoot( document, , ); }); ``` See also: - [``][hydratedrouter-onerror] ### Data Mode [modes: data] This function is called whenever React Router catches an error in your application on the client. ```tsx import { type ClientOnErrorFunction } from "react-router"; const onError: ClientOnErrorFunction = ( error, { location, params, unstable_pattern, errorInfo }, ) => { myReportError(error, location, errorInfo); // make sure to still log the error so you can see it console.error(error, errorInfo); }; function App() { return ; } ``` See also: - [``][routerprovider-onerror] [entryserver]: ../api/framework-conventions/entry.server.tsx [handleError]: ../api/framework-conventions/entry.server.tsx#handleerror [entryclient]: ../api/framework-conventions/entry.client.tsx [hydratedrouter]: ../api/framework-routers/HydratedRouter [routerprovider]: ../api/data-routers/RouterProvider [hydratedrouter-onerror]: ../api/framework-routers/HydratedRouter#onError [routerprovider-onerror]: ../api/data-routers/RouterProvider#onError