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
布尔值 - 是否应将报告提交到服务器。
这通常由用户首选项控制。如果在调用 start
之前调用,则此操作无效。
注意:此方法仅在主进程中可用。
crashReporter.addExtraParameter(key, value)
key
字符串 - 参数键,不得超过 39 个字节。value
字符串 - 参数值,不得超过 127 个字节。
设置要随崩溃报告一起发送的额外参数。此处指定的值将附加在调用 start
时通过 extra
选项设置的任何值之后发送。
以这种方式(或通过 crashReporter.start
的 extra
参数)添加的参数特定于调用进程。在主进程中添加额外参数不会导致这些参数与渲染器或其他子进程的崩溃一起发送。同样,在渲染器进程中添加额外参数不会导致这些参数与发生在其他渲染器进程或主进程中的崩溃一起发送。
注意:参数对键和值的长度有限制。键名最长不得超过 39 个字节,值不得超过 20320 个字节。键名超过最大长度的键将被静默忽略。键值超过最大长度的键值将被截断。
crashReporter.removeExtraParameter(key)
key
字符串 - 参数键,不得超过 39 个字节。
从当前参数集中移除一个额外的参数。未来的崩溃将不包含此参数。
crashReporter.getParameters()
返回 Record<string, string>
- 崩溃报告器的当前“额外”参数。
在 Node 子进程中
由于 require('electron')
在 Node 子进程中不可用,因此以下 API 在 Node 子进程中的 process
对象上可用。
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
字符串 - Electron 的版本。platform
字符串 - 例如“win32”。process_type
字符串 - 例如“renderer”。guid
字符串 - 例如“5e1286fc-da97-479e-918b-6bfb0c3d1c72”。_version
字符串 -package.json
中的版本。_productName
字符串 -crashReporter
options
对象中的产品名称。prod
字符串 - 底层产品的名称。本例中为 Electron。_companyName
字符串 -crashReporter
options
对象中的公司名称。upload_file_minidump
文件 -minidump
格式的崩溃报告。crashReporter
options
对象中extra
对象的所有一级属性。