crashReporter
원격 서버에 크래시 리포트를 전송한다.
다음은 Electron을 설정하여 크래시 리포트를 자동으로 원격 서버에 전송하는 예제다:
const { crashReporter } = require('electron')
crashReporter.start({ submitURL: 'https://your-domain.com/url-to-submit' })
크래시 리포트를 수신하고 처리할 서버를 설정하려면 다음 프로젝트를 사용할 수 있다:
참고: Electron은 크래시 수집 및 업로드에 Breakpad 대신 Crashpad를 사용하지만, 현재는 업로드 프로토콜이 동일하다.
또는 다음과 같은 제3자 호스팅 솔루션을 사용할 수도 있다:
크래시 리포트는 업로드 전에 앱의 사용자 데이터 디렉토리 아래 'Crashpad'라는 디렉토리에 임시로 저장된다. crashReporter
를 시작하기 전에 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()
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>
타입을 반환한다. 이 함수는 현재 크래시 리포터의 '추가' 파라미터를 가져온다.
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)
를 참고하세요.
크래시 리포트 전송 데이터
크래시 리포터는 submitURL
로 multipart/form-data
형식의 POST
요청을 보내며, 이때 다음 데이터를 포함한다:
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
객체에 포함된 모든 1단계 속성들