crashReporter
Process: Main,
The following is an example of setting up Electron to automatically submit crash reports to a remote server:
For setting up a server to accept and process crash reports, you can use following projects:
Note: Electron uses Crashpad, not Breakpad, to collect and upload crashes, but for the time being, the upload protocol is the same.
Or use a 3rd party hosted solution:
Crash reports are stored temporarily before being uploaded in a directory
underneath the app’s user data directory, called ‘Crashpad’. You can override
this directory by calling app.setPath('crashDumps', '/path/to/crashes')
before starting the crash reporter.
Electron uses to monitor and report crashes.
The crashReporter
module has the following methods:
options
ObjectsubmitURL
string (optional) - URL that crash reports will be sent to as POST. Required unlessuploadToServer
isfalse
.productName
string (optional) - Defaults toapp.name
.companyName
string (optional) Deprecated - Deprecated alias for{ globalExtra: { _companyName: ... } }
.uploadToServer
boolean (optional) - Whether crash reports should be sent to the server. If false, crash reports will be collected and stored in the crashes directory, but not uploaded. Default istrue
.ignoreSystemCrashHandler
boolean (optional) - If true, crashes generated in the main process will not be forwarded to the system crash handler. Default isfalse
.rateLimit
boolean (optional) macOS Windows - If true, limit the number of crashes uploaded to 1/hour. Default isfalse
.compress
boolean (optional) - If true, crash reports will be compressed and uploaded withContent-Encoding: gzip
. Default istrue
.globalExtra
Record(optional) - Extra string key/value annotations that will be sent along with any crash reports generated in any process. These annotations cannot be changed once the crash reporter has been started. If a key is present in both the global extra parameters and the process-specific extra parameters, then the global one will take precedence. By default, productName
and the app version are included, as well as the Electron version.
This method must be called before using any other crashReporter
APIs. Once
initialized this way, the crashpad handler collects crashes from all
subsequently created processes. The crash reporter cannot be disabled once
started.
This method should be called as early as possible in app startup, preferably
before app.on('ready')
. If the crash reporter is not initialized at the time
a renderer process is created, then that renderer process will not be monitored
by the crash reporter.
Note: You can test out the crash reporter by generating a crash using
process.crash()
.
Note: Parameters passed in extra
, globalExtra
or set with
addExtraParameter
have limits on the length of the keys and values. Key names
must be at most 39 bytes long, and values must be no longer than 127 bytes.
Keys with names longer than the maximum will be silently ignored. Key values
longer than the maximum length will be truncated.
Note: This method is only available in the main process.
crashReporter.getLastCrashReport()
Returns - The date and ID of the
last crash report. Only crash reports that have been uploaded will be returned;
even if a crash report is present on disk it will not be returned until it is
uploaded. In the case that there are no uploaded reports, null
is returned.
Note: This method is only available in the main process.
Returns CrashReport[]
:
Returns all uploaded crash reports. Each report contains the date and uploaded ID.
Note: This method is only available in the main process.
crashReporter.getUploadToServer()
Returns boolean
- Whether reports should be submitted to the server. Set through
the start
method or setUploadToServer
.
Note: This method is only available in the main process.
uploadToServer
boolean - Whether reports should be submitted to the server.
This would normally be controlled by user preferences. This has no effect if
called before start
is called.
Note: This method is only available in the main process.
crashReporter.addExtraParameter(key, value)
key
string - Parameter key, must be no longer than 39 bytes.value
string - Parameter value, must be no longer than 127 bytes.
Parameters added in this fashion (or via the extra
parameter to
crashReporter.start
) are specific to the calling process. Adding extra
parameters in the main process will not cause those parameters to be sent along
with crashes from renderer or other child processes. Similarly, adding extra
parameters in a renderer process will not result in those parameters being sent
with crashes that occur in other renderer processes or in the main process.
Note: Parameters have limits on the length of the keys and values. Key names must be no longer than 39 bytes, and values must be no longer than 20320 bytes. Keys with names longer than the maximum will be silently ignored. Key values longer than the maximum length will be truncated.
key
string - Parameter key, must be no longer than 39 bytes.
Remove an extra parameter from the current set of parameters. Future crashes will not include this parameter.
Returns Record<string, string>
- The current ‘extra’ parameters of the crash reporter.
Since require('electron')
is not available in Node child processes, the
following APIs are available on the process
object in Node child processes.
process.crashReporter.start(options)
See .
Note that if the crash reporter is started in the main process, it will automatically monitor child processes, so it should not be started in the child process. Only use this method if the main process does not initialize the crash reporter.
process.crashReporter.getParameters()
See .
process.crashReporter.addExtraParameter(key, value)
See .
process.crashReporter.removeExtraParameter(key)
See .
The crash reporter will send the following data to the submitURL
as
a multipart/form-data
POST
:
ver
string - The version of Electron.platform
string - e.g. ‘win32’.process_type
string - e.g. ‘renderer’.guid
string - e.g. ‘5e1286fc-da97-479e-918b-6bfb0c3d1c72’._version
string - The version inpackage.json
._productName
string - The product name in thecrashReporter
options
object.prod
string - Name of the underlying product. In this case Electron._companyName
string - The company name in thecrashReporter
options
object.upload_file_minidump
File - The crash report in the format ofminidump
.