メインコンテンツにスキップ

crashReporter

クラッシュレポートをリモートサーバーに送信します。

プロセス: メインレンダラー

以下は、クラッシュレポートをリモートサーバーに自動的に送信するようにElectronを設定する例です

const { crashReporter } = require('electron')

crashReporter.start({ submitURL: 'https://your-domain.com/url-to-submit' })

クラッシュレポートを受け入れて処理するサーバーをセットアップするには、次のプロジェクトを使用できます

注: Electronはクラッシュの収集とアップロードにBreakpadではなくCrashpadを使用しますが、当面の間、アップロードプロトコルは同じです

または、サードパーティがホストするソリューションを使用してください

クラッシュレポートは、アップロードされる前に、アプリのユーザーデータディレクトリの下にある'Crashpad'というディレクトリに一時的に保存されます。クラッシュレポーターを開始する前に、app.setPath('crashDumps', '/path/to/crashes')を呼び出すことで、このディレクトリをオーバーライドできます。

Electronは、クラッシュを監視および報告するためにcrashpadを使用します。

メソッド

crashReporterモジュールには、次のメソッドがあります

crashReporter.start(options)

  • options オブジェクト
    • submitURL string (オプション) - クラッシュレポートがPOSTとして送信されるURL。uploadToServerfalseでない限り必須。
    • productName string (オプション) - デフォルトはapp.name
    • companyName string (オプション) 非推奨 - { globalExtra: { _companyName: ... } } の非推奨エイリアス。
    • uploadToServer boolean (オプション) - クラッシュレポートをサーバーに送信するかどうか。 falseの場合、クラッシュレポートは収集されてクラッシュディレクトリに保存されますが、アップロードはされません。デフォルトはtrueです。
    • ignoreSystemCrashHandler boolean (オプション) - trueの場合、メインプロセスで生成されたクラッシュは、システムのクラッシュハンドラーに転送されません。デフォルトはfalseです。
    • rateLimit boolean (オプション) macOS Windows - trueの場合、アップロードされるクラッシュの数を1時間あたり1つに制限します。デフォルトはfalseです。
    • compress boolean (オプション) - trueの場合、クラッシュレポートは圧縮され、Content-Encoding: gzipでアップロードされます。デフォルトはtrueです。
    • extra Record<string, string> (オプション) - メインプロセスで生成されたクラッシュレポートとともに送信される追加の文字列キー/値アノテーション。文字列値のみがサポートされています。子プロセスで生成されたクラッシュには、子プロセスから生成されたクラッシュレポートへのこれらの追加パラメーターは含まれません。子プロセスからaddExtraParameterを呼び出します。
    • globalExtra Record<string, string> (オプション) - あらゆるプロセスで生成されたクラッシュレポートとともに送信される追加の文字列キー/値アノテーション。これらのアノテーションは、クラッシュレポーターが開始されると変更できません。キーがグローバル追加パラメーターとプロセス固有の追加パラメーターの両方に存在する場合、グローバルパラメーターが優先されます。デフォルトでは、productNameとアプリのバージョン、およびElectronのバージョンが含まれます。

このメソッドは、他のcrashReporter APIを使用する前に呼び出す必要があります。このように初期化されると、crashpadハンドラーは後続で作成されたすべてのプロセスからクラッシュを収集します。クラッシュレポーターは、一度開始すると無効にできません。

このメソッドは、アプリの起動時にできるだけ早く、できればapp.on('ready')の前に呼び出す必要があります。レンダラープロセスが作成されたときにクラッシュレポーターが初期化されていない場合、そのレンダラープロセスはクラッシュレポーターによって監視されません。

注: process.crash()を使用してクラッシュを生成することで、クラッシュレポーターをテストできます。

注: 最初の呼び出しstartの後に追加/更新されたextraパラメーターを送信する必要がある場合は、addExtraParameterを呼び出すことができます。

注: extraglobalExtraで渡されるパラメーター、またはaddExtraParameterで設定されるパラメーターには、キーと値の長さの制限があります。キー名は最大39バイト、値は最大127バイトである必要があります。最大長を超える名前のキーは、黙って無視されます。最大長を超えるキー値は切り捨てられます。

注: このメソッドは、メインプロセスでのみ使用できます。

crashReporter.getLastCrashReport()

CrashReport | null を返します - 最後のクラッシュレポートの日付とID。アップロードされたクラッシュレポートのみが返されます。クラッシュレポートがディスクに存在する場合でも、アップロードされるまでは返されません。アップロードされたレポートがない場合は、nullが返されます。

注: このメソッドは、メインプロセスでのみ使用できます。

crashReporter.getUploadedReports()

CrashReport[] を返します

アップロードされたすべてのクラッシュレポートを返します。各レポートには、日付とアップロードされた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> を返します - クラッシュレポーターの現在の「extra」パラメーター。

Nodeの子プロセス内

Nodeの子プロセスではrequire('electron')が使用できないため、Nodeの子プロセスのprocessオブジェクトで次のAPIを使用できます。

process.crashReporter.start(options)

crashReporter.start()を参照してください。

クラッシュレポーターがメインプロセスで開始された場合、子プロセスを自動的に監視するため、子プロセスで開始すべきではないことに注意してください。このメソッドは、メインプロセスがクラッシュレポーターを初期化しない場合にのみ使用してください。

process.crashReporter.getParameters()

crashReporter.getParameters() を参照してください。

process.crashReporter.addExtraParameter(key, value)

crashReporter.addExtraParameter(key, value) を参照してください。

process.crashReporter.removeExtraParameter(key)

crashReporter.removeExtraParameter(key) を参照してください。

クラッシュレポートのペイロード

クラッシュレポーターは、以下のデータを multipart/form-dataPOST として submitURL に送信します。

  • ver string - Electron のバージョン。
  • platform string - 例: 'win32'。
  • process_type string - 例: 'renderer'。
  • guid string - 例: '5e1286fc-da97-479e-918b-6bfb0c3d1c72'。
  • _version string - package.json のバージョン。
  • _productName string - crashReporteroptions オブジェクトの製品名。
  • prod string - 基盤となる製品の名前。この場合は Electron。
  • _companyName string - crashReporteroptions オブジェクトの会社名。
  • upload_file_minidump File - minidump 形式のクラッシュレポート。
  • crashReporteroptions オブジェクトの extra オブジェクトのすべてのトップレベルプロパティ。