Freigeben über


Uploadabstürze über die API

Wichtig

Visual Studio App Center wird am 31. März 2025 eingestellt. Sie können Visual Studio App Center zwar weiterhin verwenden, bis es vollständig eingestellt ist, es gibt jedoch mehrere empfohlene Alternativen, zu denen Sie eine Migration in Betracht ziehen können.

Erfahren Sie mehr über Supportzeitpläne und Alternativen.

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 Anlagenprotokoll in App Center hoch, und zeigen Sie die Details auf der Benutzeroberfläche der App Center-Diagnose an. In den folgenden Abschnitten wird erläutert, wie Sie Abstürze, Fehler und Anlagen hochladen.

Hinweis

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

Um einen Bericht hochzuladen, rufen Sie den App Center-Erfassungsendpunkt unter mit https://in.appcenter.ms/logs?Api-Version=1.0.0 den folgenden Headern auf:

  • Content-Type: beschreibt das Format des Texts. 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, bei der es sich um eine beliebige GUID handeln kann, die zum Nachverfolgen der Anzahl verwendet wird.

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 Protokollzeitstempel datum-uhrzeit, z.B. "2017-03-13T18:05:42Z" - wenn festgelegt, muss höchstens 72 Stunden in der zukünftigen Erfassungszeit sein
  • appLaunchTimestamp: Erforderliche Zeichenfolge, die Datum-Uhrzeit-Zeit des Zeitstempels angibt, als die App gestartet wurde, z. B. "2017-03-13T18:05:42Z".
  • device: Erforderliches Objekt mit Gerätemerkmalen
    • appVersion: erforderliche Zeichenfolge mit dem Namen der Anwendungsversion, z. B. "1.1.0"
    • appBuild: Erforderliche Zeichenfolge mit der Buildnummer der Anwendung, 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 semantischen Versionsverwaltungsformat, 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 Zeitzone des Geräts. Einschließlich Sommerzeit, z. B. 120.
  • userId: optionale Zeichenfolge, die zum Zuordnen von Protokollen zu Benutzern verwendet wird
  • exception: Erforderliches Objekt mit Ausnahmedetails
    • type: erforderliche Zeichenfolge mit Ausnahmetyp
    • frame: optionales Array mit Stapelrahmen
    • message: optionale Zeichenfolge mit Ausnahmegrund
    • stackTrace: optionale Zeichenfolge mit unformatierter Stapelüberwachung
    • innerException: optionales Array mit inneren Ausnahmen

Beispiele für das Hochladen eines Absturzberichts, eines Fehlerberichts und einer Anlage finden Sie unten. Weitere Spezifikationen finden Sie hier.

Hinweis

Aufgrund von Aufbewahrungsrichtlinien darf der Bericht timestamp nicht länger als 25 Tage in den letzten oder 3 Tagen in der Zukunft sein.

Hochladen eines Absturzberichts

Die folgenden Eigenschaften sind erforderlich, um einen Absturzbericht hochzuladen:

  • 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 geführt hat
  • processName: erforderliche Zeichenfolge mit dem Prozessnamen
  • appNamespace: Erforderlich für Android-Apps, andernfalls optionale Zeichenfolge mit dem Paketbezeichner, Paketbezeichner oder Namespace, je nachdem, welche Plattform verwendet wird.

Um einen Absturzbericht hochzuladen, der nicht das Apple-Format ist, 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

Stellen Sie zum Hochladen eines Apple-Absturzprotokolls sicher, dass der Protokolltyp auf "appleError" festgelegt ist. Die folgenden Eigenschaften sind ebenfalls erforderlich:

  • primaryArchitectureId: Erforderlicher ganzzahliger Wert mit primärer CPU-Architektur
  • applicationPath: erforderliche Zeichenfolge mit dem Pfad zur Anwendung
  • osExceptionType: erforderliche Zeichenfolge mit Ausnahmetyp des Betriebssystems
  • osExceptionCode: erforderliche Zeichenfolge mit Ausnahmecode des Betriebssystems
  • osExceptionAddress: erforderliche Zeichenfolge mit Betriebssystemausnahmeadresse
  • 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" und 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"
        }
      ]

    }
  ]
}'

Hochladen eines Breakpad-Absturzprotokolls und minidump

Sie können einen benutzerdefinierten Breakpadabsturz 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 Breakpadabsturz hochzuladen, muss das wrapperSdkName Feld auf "custom.ndk" festgelegt werden, und Sie müssen die Minidump-Datei als Anlage an den Absturzbericht anfügen. Erfahren Sie, wie Sie eine Anlage im Abschnitt Anlagen dieser Seite senden.

Um Ihren Absturz zu symbolisch zu machen, müssen Sie Ihre Symbole gemäß unserer API-Dokumentation über die CLI oder API hochladen. Wenn Sie Breakpad mit Android verwenden, werden beide Optionen unterstützt, die in unseren Android NDK-Dokumentationen angegeben sind. Wenn Sie Breakpad mit Windows verwenden, wird nur Option 2: "Breakpadsymbole hochladen" unterstützt.

Hinweis

Wenn Sie Ihre Symbole von macOS hochladen, müssen Sie Ihre Symbole aus allen überflüssigen Ordnern sauber, z. B. wird __MACOS generiert, und um dies zu löschen, können Sie verwendenzip -d <symbols.zip> __MACOSX/\*.

Hochladen eines Fehlerberichts

Behandelte Fehler werden derzeit nur für Android-, Xamarin-, Unity-, UWP-, WPF- und WinForms-Apps unterstützt. Stellen Sie zum Hochladen eines Fehlerberichts 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 ",
              }
            ],
          }
        ],
      }
    }
  ]
}'

Hochladen einer Anlage

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.

Anlagenspezifische Eigenschaften:

  • contentType: Erforderliche Zeichenfolge mit dem Inhaltstyp , z. B. "text/plain" für Text. Beispiele für unterstützte Typen finden Sie hier.
  • data: Erforderliche Zeichenfolge mit Daten, die als Basis 64 codiert sind
  • errorId: Erforderliche Zeichenfolge mit dem eindeutigen Bezeichner des zugeordneten Fehlerberichts der Anlage
  • fileName: Erforderliche Zeichenfolge für NDK-Abstürze, die auf "minidump.dmp" festgelegt ist

Hinweis

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

Im Folgenden finden Sie ein Beispiel für das Hochladen eines Absturzberichts und einer Anlage in einem Aufruf.

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"
      }
    }
  ]
}'