Freigeben über


Upload stürzt über die API ab

Von Bedeutung

Visual Studio App Center wurde am 31. März 2025 eingestellt, mit Ausnahme der Analyse- und Diagnosefeatures, die bis zum 30. Juni 2026 weiterhin unterstützt werden. Weitere Informationen

Sie können einen Absturzbericht hochladen, wenn Sie unser SDK nicht verwenden oder für eine benutzerdefinierte Plattform entwickeln möchten. Laden Sie ein Absturz-, Fehler- oder Anhangsprotokoll in App Center hoch, und zeigen Sie die Details in der Diagnoseoberfläche des App Centers an. In den folgenden Abschnitten wird erläutert, wie Abstürze, Fehler und Anlagen hochgeladen werden.

Hinweis

App Center akzeptiert nur bis zu 60 Abstürze und behandelte Fehler pro Minute und pro eindeutiger App. Wir werden keine Abstürze oder Fehler verarbeiten, die diesen Grenzwert überschreiten.

Rufen Sie zum Hochladen eines Berichts den App Center-Ingestionsendpunkt https://in.appcenter.ms/logs?Api-Version=1.0.0 mit den folgenden Headern auf.

  • Content-Type: beschreibt das Format des Textkörpers. Das App Center unterstützt derzeit nur das JSON-Format.
  • App-Secret: Zeichenfolge, die der eindeutige Bezeichner für jede App ist. Sie finden das App-Geheimnis in den Einstellungen einer App.
  • Install-ID: Zeichenfolge, die jede beliebige GUID sein kann, die dazu verwendet wird, Zählwerte zu verfolgen.

Protokolleigenschaften:

  • type: Erforderliche Zeichenfolge mit Protokolltyp - "appleError" für Apple-Abstürze, "managedError" für andere Abstürze, "handledError" für Fehler und "errorAttachment" für Fehleranlagen.
  • timestamp: optionale Zeichenfolge mit Protokoll-Zeitstempeldatum-Uhrzeit, z. B. "2017-03-13T18:05:42Z" - wenn festgelegt, muss höchstens 72 Stunden in der Zukunft der Aufnahmezeit betragen
  • appLaunchTimestamp: Erforderliche Zeichenfolge, die datums- und uhrzeit des Startdatums der App angibt, z. B. "2017-03-13T18:05:42Z".
  • device: Erforderliches Objekt mit Gerätemerkmalen
    • appVersion: Erforderliche Zeichenfolge mit Anwendungsversionsname, z. B. "1.1.0"
    • appBuild: Erforderliche Zeichenfolge mit Anwendungsbuildnummer, z. B. "42"
    • sdkName: Erforderliche Zeichenfolge mit dem Namen des SDK. Besteht aus dem Namen des SDK und der Plattform, z. B. "appcenter.android" für Android und "appcenter.custom" für benutzerdefinierte Plattformen
    • sdkVersion: Erforderliche Zeichenfolge mit Version des SDK im Semantikversionsformat, z. B. "1.2.0" oder "0.12.3-alpha.1"
    • osName: Erforderliche Zeichenfolge mit Betriebssystemname, z. B. "android"
    • osVersion: Erforderliche Zeichenfolge mit Betriebssystemversion, z. B. "9.3.0"
    • model: optionale Zeichenfolge mit Gerätemodell, z. B. "iPad2"
    • locale: Erforderliche Zeichenfolge mit Sprachcode, z. B. "en-US"
    • timeZoneOffset: Optionaler Offset in Minuten (zwischen -840 und 840) von koordinierter Weltzeit (UTC) für die Gerätezeitzone. Inklusive Sommerzeit, z. B. 120.
  • userId: Optionale Zeichenfolge zum Zuordnen von Protokollen zu Benutzern
  • exception: Erforderliches Objekt mit Ausnahmedetails
    • type: Erforderliche Zeichenfolge mit Ausnahmetyp
    • frame: optionales Array mit Stapelframes
    • message: optionale Zeichenfolge mit Ausnahmegrund
    • stackTrace: optionale Zeichenfolge mit unformatierter Stapelablaufverfolgung
    • innerException: optionales Array mit inneren Ausnahmen

Beispiele zum Hochladen eines Absturzberichts, eines Fehlerberichts und einer Anlage finden Sie unten. Für weitere Spezifikationen finden Sie die vollständige Datei hier.

Hinweis

Aufgrund von Aufbewahrungsrichtlinien darf der Bericht timestamp nicht mehr als 25 Tage in der Vergangenheit oder 3 Tage in der Zukunft sein.

Hochladen eines Absturzberichts

Zum Hochladen eines Absturzberichts sind die folgenden Eigenschaften erforderlich:

  • processId: Erforderlicher ganzzahliger Wert mit Prozessbezeichner
  • id: Erforderliche Zeichenfolge mit Ausnahmebezeichner muss eine eindeutige ID für diesen Bericht sein.
  • fatal: Erforderlicher boolescher Wert, der angibt, ob die Ausnahme zu einem Absturz führte
  • processName: Erforderliche Zeichenfolge mit dem Prozessnamen
  • appNamespace: Erforderlich für Android-Apps, andernfalls optionale Zeichenfolge mit dem Bundle-Identifikator, Paketbezeichner oder Namespace, je nachdem, welche Plattform verwendet wird.

Um einen anderen Absturzbericht als das Apple-Format hochzuladen, stellen Sie sicher, dass der Protokolltyp auf "managedError" festgelegt ist.

curl -X POST \
  'https://in.appcenter.ms/logs?Api-Version=1.0.0' \
  -H 'Content-Type: application/json' \
  -H 'app-secret: <app secret>' \
  -H 'install-id: 00000000-0000-0000-0000-000000000001' \
  -d '{
  "logs": [
    {
      "type": "managedError",
      "timestamp": "2019-10-08T04:22:23.516Z",
      "appLaunchTimestamp": "2019-09-29T22:22:23.516Z",
      "processId": "123",
      "id": "bca65f46-46ee-451b-83bb-2e358c3f45bf",
      "fatal": true,
      "processName": "com.microsoft.appcenter.demo.project",
      "device": {
        "appVersion": "12.0",
        "appBuild": "1",
        "sdkName": "custom.android",
        "sdkVersion": "1.0.0",
        "osName": "android",
        "osVersion": "9.3",
        "model": "Pixel",
        "locale": "en-US",
        "appNamespace": "com.contoso.myapp"
      },
      "userId": "TestID",
      "exception": {
        "type": "java.lang.RuntimeException",
        "frames": [
          {
            "className": "android.app.ActivityThread",
            "fileName": "ActivityThread.java",
            "lineNumber": 2575,
            "methodName": "performResumeActivity"
          },
          {
            "className": "android.app.ActivityThread",
            "fileName": "ActivityThread.java",
            "lineNumber": 2603,
            "methodName": "handleResumeActivity"
          },
          {
            "className": "android.app.ActivityThread",
            "fileName": "ActivityThread.java",
            "lineNumber": 2089,
            "methodName": "handleLaunchActivity"
          },
          {
            "className": "android.app.ActivityThread",
            "fileName": "ActivityThread.java",
            "lineNumber": 130,
            "methodName": "access$600"
          },
          {
            "className": "android.app.ActivityThread$H",
            "fileName": "ActivityThread.java",
            "lineNumber": 1195,
            "methodName": "handleMessage"
          },
          {
            "className": "android.os.Handler",
            "fileName": "Handler.java",
            "lineNumber": 99,
            "methodName": "dispatchMessage"
          },
          {
            "className": "android.os.Looper",
            "fileName": "Looper.java",
            "lineNumber": 137,
            "methodName": "loop"
          },
          {
            "className": "android.app.ActivityThread",
            "fileName": "ActivityThread.java",
            "lineNumber": 4745,
            "methodName": "main"
          }
        ],
        "innerExceptions": [
          {
            "type": "java.lang.RuntimeException",
            "frames": [
              {
                "className": "android.app.Activity",
                "fileName": "Activity.java",
                "lineNumber": 5084,
                "methodName": "performResume"
              },
              {
                "className": "android.app.ActivityThread",
                "fileName": "ActivityThread.java",
                "lineNumber": 2565,
                "methodName": "performResumeActivity"
              },
              {
                "className": "android.app.ActivityThread",
                "fileName": "ActivityThread.java",
                "lineNumber": 2603,
                "methodName": "handleResumeActivity"
              }
            ]
          }
        ]
      }
    }
  ]
}'

Hochladen eines Apple-Absturzprotokolls

Um ein Apple-Absturzprotokoll hochzuladen, stellen Sie sicher, dass der Protokolltyp auf "appleError" festgelegt ist. Die folgenden Eigenschaften sind ebenfalls erforderlich:

  • primaryArchitectureId: Erforderliche ganze Zahl mit primärer CPU-Architektur
  • applicationPath: Erforderliche Zeichenfolge mit dem Pfad zur Anwendung
  • osExceptionType: Erforderliche Zeichenfolge mit Ausnahmetyp des Betriebssystems
  • osExceptionCode: Erforderliche Zeichenfolge mit Betriebssystem-Ausnahmecode
  • osExceptionAddress: Erforderliche Zeichenfolge mit Betriebssystem-Ausnahmeadresse
  • binaries: Erforderliches Array mit Binärdateien, die dem Fehler zugeordnet sind

Beispiel:

curl -X POST \
  'https://in.appcenter.ms/logs?Api-Version=1.0.0' \
  -H 'Content-Type: application/json' \
  -H 'app-secret: <app secret>' \
  -H 'install-id: 00000000-0000-0000-0000-000000000001' \
  -d '{
  "logs":
  [
    {
        "type": "appleError",
        "timestamp": "2019-10-08T02:44:55.000Z",
        "appLaunchTimestamp": "2019-09-29T22:22:23.516Z",
        "id": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
        "applicationPath": "iOS/salesforce",
        "osExceptionType": "CustomerIssue (TestIssue)",
        "osExceptionCode": "0",
        "osExceptionAddress": "0x00",
        "processName": "salesforce",
        "fatal": true,
        "isTestMessage": false,
        "device": {
          "appVersion": "10.0",
          "appBuild": "1",
          "sdkName": "custom.ios",
          "sdkVersion": "1.0.0",
          "osName": "iOS",
          "osVersion": "9.3",
          "model": "iPhone9,1",
          "locale": "en-US"
        },
        "userId": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
        "fatal": true,
        "threads": [
         {
          "id": 0,
          "frames": [
            {
              "address": "0x000000018ada4d70",
              "code": "0x18ad87000 + 122224"
            },
            {
              "address": "0x0000000104463884",
              "code": "0x10445c000 + 30852"
            },
            {
              "address": "0x000000010438f640",
              "code": "0x104388000 + 30272"
            },
            {
              "address": "0x00000001b859fb64",
              "code": "0x1b8229000 + 3631972"
            }
          ]
        },
        {
          "id": 1,
          "frames": [
            {
              "address": "0x000000018bb4fce0",
              "code": "0x18baa2000 + 711904"
            },
            {
              "address": "0x000000018bbf7078",
              "code": "0x18baa2000 + 1396856"
            },
            {
              "address": "0x000000018baa8258",
              "code": "0x18baa2000 + 25176"
            },
            {
              "address": "0x000000018bb1c49c",
              "code": "0x18baa2000 + 500892"
            }
          ]
        },
        {
          "id": 3,
          "frames": [
            {
              "address": "0x000000018b755b9c",
              "code": "0x18b732000 + 146332"
            },
            {
              "address": "0x000000018b7dcd00",
              "code": "0x18b7ce000 + 60672"
            }
          ]
        }
      ],
      "binaries": [
        {
          "id": "d449e33d-7e74-379d-8b79-15ee104ed1df",
          "startAddress": "0x0000000104388000",
          "endAddress": "0x0000000104413fff",
          "name": "CrashProbeiOS",
          "path": "/var/containers/Bundle/Application/023013EA-0D58-4F6D-8B98-49E1372F4044/CrashProbeiOS.app/CrashProbeiOS",
          "primaryArchitectureId": 16777228,
          "architectureVariantId": 0
        },
        {
          "id": "5da23653-d126-39f0-bdcf-994b3019f92c",
          "startAddress": "0x000000010445c000",
          "endAddress": "0x0000000104467fff",
          "name": "CrashLibiOS",
          "path": "/private/var/containers/Bundle/Application/023013EA-0D58-4F6D-8B98-49E1372F4044/CrashProbeiOS.app/Frameworks/CrashLibiOS.framework/CrashLibiOS",
          "primaryArchitectureId": 16777228,
          "architectureVariantId": 0
        }
      ]
    }
  ]
}'

Hochladen eines benutzerdefinierten Absturzprotokolls

Um einen Absturz für eine benutzerdefinierte Plattform hochzuladen, stellen Sie sicher, dass der Protokolltyp auf "managedError" festgelegt ist und der sdkName auf "appcenter.custom" festgelegt ist. Beispiel:

curl -X POST \
  'https://in.appcenter.ms/logs?Api-Version=1.0.0' \
  -H 'Content-Type: application/json' \
  -H 'app-secret: <app secret>' \
  -H 'install-id: 00000000-0000-0000-0000-000000000001' \
  -d '{
  "logs": [
    {
      "type": "managedError",
      "id": "a7bea41b-1e4d-4e42-ae76-1025f4fdfc4f",
      "userId": "TestID",
      "timestamp": "2019-11-26T02:00:04Z",
      "appLaunchTimestamp": "2019-11-26T02:00:04Z",
      "architecture": "armeabi-v7a",
      "fatal": true,
      "processId": 4871,
      "processName": "com.microsoft.appcenter.sasquatch.project",
      "sid": "bca65f46-46ee-451b-83bb-2e358c3f45bf",
      "errorThreadId": 1,
      "errorThreadName": "main",
      "device": {
        "appBuild": "1337",
        "appVersion": "7.1.0",
        "appNamespace": "com.microsoft.appcenter.sasquatch.project",
        "carrierCountry": "us",
        "locale": "en_US",
        "model": "Galaxy Nexus",
        "oemName": "samsung",
        "osApiLevel": 16,
        "osBuild": "JRO03O",
        "osName": "Android",
        "osVersion": "5.0.0",
        "screenSize": "720x1184",
        "sdkName": "appcenter.custom",
        "sdkVersion": "1.9.1",
        "timeZoneOffset": -480
      },
       "exception": {
        "frames": [
          {
            "className": "android.app.ActivityThread",
            "fileName": "ActivityThread.java",
            "lineNumber": 2575,
            "methodName": "performResumeActivity"
          },
          {
            "className": "android.app.ActivityThread",
            "fileName": "ActivityThread.java",
            "lineNumber": 2603,
            "methodName": "handleResumeActivity"
          },
          {
            "className": "android.app.ActivityThread",
            "fileName": "ActivityThread.java",
            "lineNumber": 2089,
            "methodName": "handleLaunchActivity"
          }
        ],
        "innerExceptions": [
          {
            "frames": [
              {
                "className": "android.app.CustomActivity",
                "fileName": "CustomActivity.java",
                "lineNumber": 8673,
                "methodName": "performCustomResume"
              },
              {
                "className": "android.app.ActivityThread",
                "fileName": "ActivityThread.java",
                "lineNumber": 2565,
                "methodName": "performResumeActivity"
              }
            ],
            "message": "Activity {com.microsoft.appcenter.sasquatch.project/com.microsoft.appcenter.sasquatch.activities.CrashSubActivity2} did not call through to super.onResume()",
            "type": "android.app.CustomNotCalledException"
          }
        ],
        "message": "Unable to resume activity {com.microsoft.appcenter.sasquatch.project/com.microsoft.appcenter.sasquatch.activities.CrashSubActivity2}: android.app.SuperNotCalledException: Activity {com.microsoft.appcenter.sasquatch.project/com.microsoft.appcenter.sasquatch.activities.CrashSubActivity2} did not call through to super.onResume()",
        "type": "java.lang.RuntimeException"
      },
      "threads": [
        {
          "frames": [
            {
              "className": "dalvik.system.NativeStart",
              "fileName": "NativeStart.java",
              "lineNumber": -2,
              "methodName": "run"
            }
          ],
          "id": 369,
          "name": "Binder_3"
        },
        {
          "frames": [
            {
              "className": "dalvik.system.NativeStart",
              "fileName": "NativeStart.java",
              "lineNumber": -2,
              "methodName": "run"
            }
          ],
          "id": 345,
          "name": "Compiler"
        }
      ]

    }
  ]
}'

Laden Sie ein Breakpad-Absturzprotokoll und einen Minidump hoch

Sie können einen benutzerdefinierten Breakpad-Absturz für Android und Windows hochladen. Beispiel:

curl -X POST \
  'https://in.appcenter.ms/logs?Api-Version=1.0.0' \
  -H 'Content-Type: application/json' \
  -H 'app-secret: <app secret>' \
  -H 'install-id: 00000000-0000-0000-0000-000000000001' \
  -d '{
  "logs":
  [
    {
      "type": "managedError",
      "id": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
      "userId": "TestID",
      "processId": 9448,
      "processName": "Contoso.UWP.Puppet.exe",
      "fatal": true,
      "timestamp": "2019-10-08T06:22:23.530Z",
      "architecture": "X64",
      "timestamp": "2019-10-08T06:22:23.516Z",
      "sid": "d4608adf-83b9-4f69-90ad-8bb0234080a7",
      "device": {
        "sdkName": "appcenter.custom",
        "sdkVersion": "2.4.1-SNAPSHOT",
        "model": "Parallels Virtual Platform",
        "oemName": "Parallels Software International Inc.",
        "osName": "WINDOWS",
        "osVersion": "10.0.18363",
        "osBuild": "10.0.18363.418",
        "locale": "en-US",
        "timeZoneOffset": -300,
        "screenSize": "4608x2470",
        "appVersion": "1.0",
        "appBuild": "1.0",
        "appNamespace": "10805zumoTestUser.AppCenter-Contoso.UWP.Puppet",
        "carrierCountry": "us",
        "wrapperSdkName": "custom.ndk"
      },
      "exception": {
        "type": "minidump",
        "wrapperSdkName": "custom.ndk"
      }
    },
    {
      "contentType": "application/octet-stream",
      "errorId": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
      "fileName": "minidump.dmp",
      "id": "7b975468-5656-40a5-8242-c1907b26fc31",
      "sid": "03693776-cdd4-46b8-bbda-12af457f1732",
      "timestamp": "2019-10-08T06:22:23.516Z",
      "type": "errorAttachment",
       "device": {
        "sdkName": "appcenter.custom",
        "sdkVersion": "2.4.1-SNAPSHOT",
        "model": "Parallels Virtual Platform",
        "oemName": "Parallels Software International Inc.",
        "osName": "WINDOWS",
        "osVersion": "10.0.18363",
        "osBuild": "10.0.18363.418",
        "locale": "en-US",
        "timeZoneOffset": -300,
        "screenSize": "4608x2470",
        "appVersion": "1.0",
        "appBuild": "1.0",
        "appNamespace": "10805zumoTestUser.AppCenter-Contoso.UWP.Puppet",
        "carrierCountry": "us",
        "wrapperSdkName": "custom.ndk"
      },
      "data": "<base64 encoded minidump>"
    }
  ]
}'

Vorbehalte

Um einen Breakpad-Absturz hochzuladen, muss das wrapperSdkName Feld auf "custom.ndk" festgelegt sein, und Sie müssen die Minidumpdatei als Anlage an den Absturzbericht anfügen. Erfahren Sie, wie Sie eine Anlage im Abschnitt "Anlagen " dieser Seite senden.

Um Ihre Absturzberichte symbolisch darzustellen, müssen Sie Ihre Symbole über die CLI oder API gemäß unseren API-Dokumenten hochladen. Wenn Sie Breakpad mit Android verwenden, werden beide in unseren Android-NDK-Dokumenten angegebenen Optionen unterstützt. Wenn Sie Breakpad mit Windows verwenden, wird nur Option 2: "Breakpad-Symbole hochladen" unterstützt.

Hinweis

Wenn Sie Ihre Symbole von macOS hochladen, müssen Sie Ihre Symbole von zusätzlichen Ordnern bereinigen. Zum Beispiel wird __MACOS generiert, und um es zu löschen, können Sie zip -d <symbols.zip> __MACOSX/\* verwenden.

Hochladen eines Fehlerberichts

Behandelte Fehler werden derzeit nur für Android-, Xamarin-, Unity-, UWP-, WPF- und WinForms-Apps unterstützt. Um einen Fehlerbericht hochzuladen, stellen Sie sicher, dass der Protokolltyp auf "handledError" festgelegt ist.

curl -X POST \
  'https://in.appcenter.ms/logs?Api-Version=1.0.0' \
  -H 'Content-Type: application/json' \
  -H 'app-secret: <app secret>' \
  -H 'install-id: 00000000-0000-0000-0000-000000000001' \
  -d '{
  "logs":
  [
    {
      "type": "handledError",
      "timestamp": "2019-10-08T06:22:23.516Z",
      "appLaunchTimestamp": "2019-09-29T22:22:23.516Z",
      "id": "118dee14-9193-4ac3-9ef0-f6c11b43f2c4",
      "device": {
        "appVersion": "11.0",
        "appBuild": "1",
        "sdkName": "custom.android",
        "sdkVersion": "1.0.0",
        "osName": "android",
        "osVersion": "9.3",
        "model": "Pixel",
        "locale": "en-US"
      },
      "userId": "TestID",
      "exception": {
        "type": "System.IO.IOException",
        "message": "Server did not respond",
        "stackTrace": "  at Contoso.Forms.Puppet.FakeService+<>c.<DoStuffInBackground>b__0_0 () [0x00000] in <7ad93f134a5d4c00a8db8be9aa9c0f76>:0 \n  at System.Threading.Tasks.Task`1[TResult].InnerInvoke () [0x0000f] in <b38d4262627948c1b945a72f56ce6466>:0 \n  at System.Threading.Tasks.Task.Execute () [0x00010] in <b38d4262627948c1b945a72f56ce6466>:0 \n--- End of stack trace from previous location where exception was thrown ---\n  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <b38d4262627948c1b945a72f56ce6466>:0 \n  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0003e] in <b38d4262627948c1b945a72f56ce6466>:0 \n  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <b38d4262627948c1b945a72f56ce6466>:0",
        "innerExceptions": [
          {
            "type": "System.IO.IOException",
            "message": "Network down",
            "stackTrace": "  at Contoso.Forms.Demo.CrashesContentPage.SendHttp () [0x00002] in <4fd9174f6e18457b9721bfba2cd78098>:0 ",
            "wrapperSdkName": "appcenter.xamarin"
          },
          {
            "type": "System.ArgumentException",
            "message": "Invalid parameter",
            "innerExceptions": [
              {
                "type": "System.ArgumentOutOfRangeException",
                "message": "It is over 9000!",
                "stackTrace": "  at Contoso.Forms.Demo.CrashesContentPage.ValidateLength () [0x00002] in <4fd9174f6e18457b9721bfba2cd78098>:0 ",
              }
            ],
          }
        ],
      }
    }
  ]
}'

Ein Anhang hochladen

Alle Anlagen müssen einem Absturzbericht zugeordnet sein. Sie können entweder eine Anlage mit einem Absturzbericht in einem Anruf oder in zwei separaten Anrufen hochladen.

Anhängespezifische Eigenschaften:

  • contentType: Erforderliche Zeichenfolge mit Inhaltstyp, z. B. "text/plain" für Text. Hier finden Sie Beispiele für unterstützte Typen.
  • data: Erforderliche Zeichenfolge mit als Base64 codierten Daten
  • errorId: Erforderliche Zeichenfolge, die den eindeutigen Bezeichner des zugeordneten Fehlerberichts des Anhangs enthält
  • fileName: Erforderliche Zeichenfolge für NDK-Abstürze, die auf "minidump.dmp" festgelegt ist.

Hinweis

Die Größenbeschränkung für Anlagen beträgt derzeit 7 MB. Beim Versuch, eine größere Anlage zu senden, wird ein Fehler ausgelöst.

Nachfolgend finden Sie ein Beispiel für das Hochladen eines Absturzberichts und einer Anlage in einem Anruf.

curl -X POST \
  'https://in.appcenter.ms/logs?Api-Version=1.0.0' \
  -H 'Content-Type: application/json' \
  -H 'app-secret: <app secret>' \
  -H 'install-id: 00000000-0000-0000-0000-000000000001' \
  -d '{
  "logs": [
    {
      "type": "managedError",
      "timestamp": "2019-10-01T02:22:23.516Z",
      "appLaunchTimestamp": "2019-09-29T22:22:23.516Z",
      "id": "bca65f46-46ee-451b-83bb-2e358c3f45bf",
      "fatal": true,
      "processName": "com.microsoft.appcenter.sasquatch.project",
      "device": {
        "appVersion": "13.0",
        "appBuild": "1",
        "sdkName": "appcenter.android",
        "sdkVersion": "1.0.0",
        "osName": "android",
        "osVersion": "9.3",
        "model": "Pixel",
        "locale": "en-US"
      },
      "userId": "118dee14",
      "fatal": true,
      "exception": {
          "type": "CustomerIssue",
          "frames": []
      }
    },
    {
      "type": "errorAttachment",
      "contentType": "text/plain",
      "timestamp": "2019-10-01T02:22:23.516Z",
      "data": "aGVsbG8=",
      "errorId": "bca65f46-46ee-451b-83bb-2e358c3f45bf",
      "id": "7caaea8e-dab1-4588-993c-95de2d9a4fd1",
      "device": {
        "appVersion": "13.0",
        "appBuild": "1",
        "sdkName": "appcenter.android",
        "sdkVersion": "1.0.0",
        "osName": "android",
        "osVersion": "9.3",
        "model": "Pixel",
        "locale": "en-US"
      }
    }
  ]
}'