crashReporter
将崩溃报告提交到远程服务器。
下面是设置 Electron 自动向远程服务器提交崩溃报告的示例。
const { crashReporter } = require('electron')
crashReporter.start({ submitURL: 'https://your-domain.com/url-to-submit' })
若要搭建服务器来接收并处理崩溃报告,可以使用下列项目:
Electron 使用 Crashpad 而不是 Breakpad 来收集和上传崩溃报告,但目前,其上传协议是相同的。
或者使用第三方托管解决方案:
崩溃报告在上传前会临时存储在应用程序用户数据目录下的一个名为“Crashpad”的目录中。你可以在启动崩溃报告器之前,通过调用 app.setPath('crashDumps', '/path/to/crashes')
来覆盖这个目录。
Electron 使用 crashpad 来监控和报告崩溃。
方法
crashReporter
模块有以下方法:
crashReporter.start(options)
此方法必须在使用任何其他 crashReporter
API 之前调用。一旦以这种方式初始化,crashpad 处理程序就会收集所有后续创建的进程中的崩溃。崩溃报告器一旦启动就无法禁用。
此方法应在应用启动时尽早调用,最好在 app.on('ready')
之前。如果在创建渲染进程时崩溃报告器没有被初始化,那么该渲染进程将不会被崩溃报告器监控。
您可以通过使用 process.crash()
生成一个崩溃来测试崩溃报告器。
如果您在首次调用 start
后需要发送额外或更新的 extra
参数,可以调用 addExtraParameter
。
在 extra
、globalExtra
中传递或用 addExtraParameter
设置的参数的键和值有长度限制。键名最长为39字节,值最长不得超过127字节。名称超过最大长度的键将被静默忽略。值超过最大长度的键值将被截断。
此方法仅在主进程中可用。
crashReporter.getLastCrashReport()
返回 CrashReport | null - 最后一次崩溃报告的日期和 ID。只有已上传的崩溃报告才会被返回;即使崩溃报告存在于磁盘上,在上传之前也不会被返回。如果没有已上传的报告,则返回 null
。
此方法仅在主进程中可用。
crashReporter.getUploadedReports()
返回所有已上传的崩溃报告。每个报告包含日期和上传 ID。
此方法仅在主进程中可用。
crashReporter.getUploadToServer()
返回 boolean
- 报告是否应提交到服务器。通过 start
方法或 setUploadToServer
设置。
此方法仅在主进程中可用。
crashReporter.setUploadToServer(uploadToServer)
uploadToServer
boolean - 报告是否应提交到服务器。
这通常由用户偏好控制。如果在调用 start
之前调用此方法,则无效。
此方法仅在主进程中可用。
crashReporter.addExtraParameter(key, value)
key
string - 参数键,长度不得超过39字节。value
string - 参数值,长度不得超过127字节。
设置一个要随崩溃报告一起发送的额外参数。这里指定的值将与调用 start
时通过 extra
选项设置的任何值一起发送。
以这种方式添加的参数(或通过 crashReporter.start
的 extra
参数)特定于调用进程。在主进程中添加额外参数不会导致这些参数与来自渲染器或其他子进程的崩溃一起发送。同样,在渲染进程中添加额外参数也不会导致这些参数与其他渲染进程或主进程中发生的崩溃一起发送。
参数的键和值有长度限制。键名长度不得超过39字节,值长度不得超过20320字节。名称超过最大长度的键将被静默忽略。值超过最大长度的键值将被截断。
crashReporter.removeExtraParameter(key)
key
string - 参数键,长度不得超过39字节。
从当前参数集中移除一个额外参数。未来的崩溃将不包含此参数。
crashReporter.getParameters()
返回 Record<string, string>
- 崩溃报告器的当前“额外”参数。
在 Node 子进程中
由于在 Node 子进程中 require('electron')
不可用,因此在 Node 子进程的 process
对象上提供了以下 API。
process.crashReporter.start(options)
注意,如果崩溃报告器在主进程中启动,它会自动监控子进程,所以不应在子进程中启动。只有在主进程没有初始化崩溃报告器时才使用此方法。
process.crashReporter.getParameters()
参见 crashReporter.getParameters()
。
process.crashReporter.addExtraParameter(key, value)
参见 crashReporter.addExtraParameter(key, value)
。
process.crashReporter.removeExtraParameter(key)
参见 crashReporter.removeExtraParameter(key)
。
崩溃报告的有效载荷
崩溃报告器将以 multipart/form-data
POST
形式向 submitURL
发送以下数据:
ver
string - Electron 的版本。platform
string - 例如 'win32'。process_type
string - 例如 'renderer'。guid
string - 例如 '5e1286fc-da97-479e-918b-6bfb0c3d1c72'。_version
string -package.json
中的版本。_productName
string -crashReporter
options
对象中的产品名称。prod
string - 底层产品的名称。这里是 Electron。_companyName
string -crashReporter
options
对象中的公司名称。upload_file_minidump
File -minidump
格式的崩溃报告。crashReporter
options
对象中extra
对象的所有一级属性。