2015-03-13 62 views
3

我想用hockeyapp发送错误报告,而不必让整个应用程序崩溃并烧毁。我不认为HockeyApp.WPF库有这个功能,所以我开始乱搞执行我自己的CrashHandler使用HockeyApp发送处理的异常报告(Windows)

这很快就让人感到困惑和非常hackey。有没有人有任何代码示例?以我目前的速度,我将最终复制HockeyApp图书馆的一半,所以我希望能得到一些帮助。

我不张贴我的代码,因为我不认为它会有帮助,它太多了。

编辑:现在,我将发布的,这并不码的缩短版似乎工作:

 private static void HandleException(Exception e) { 
     try { 
      string crashID = Guid.NewGuid().ToString(); 
      String filename = String.Format("{0}{1}.log", CrashFilePrefix, crashID); 

      CrashLogInformation logInfo = new CrashLogInformation() { 
       PackageName = Application.Current.GetType().Namespace, 
       Version = ((HockeyClient)HockeyClient.Current).VersionInfo, 
       OperatingSystem = Environment.OSVersion.Platform.ToString(), 
       Windows = Environment.OSVersion.Version.ToString() + Environment.OSVersion.ServicePack, 
       Manufacturer = "", 
       Model = "" 
      }; 

      ICrashData crash = ((HockeyClient)HockeyClient.Current).CreateCrashData(e); 
      using (FileStream stream = File.Create(Path.Combine(GetPathToHockeyCrashes(), filename))) { 
       crash.Serialize(stream); 
       stream.Flush(); 
      } 
     } 
     catch (Exception ex) { 
      ((HockeyClient)HockeyClient.Current).HandleInternalUnhandledException(ex); 
     } 
    } 
    private static string GetPathToHockeyCrashes() { 
     string path = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); 
     if (!path.EndsWith("\\")) { path += "\\"; } 
     path += "HockeyCrashes\\"; 
     if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } 
     return path; 
    } 


    private struct CrashLogInformation { 
     /// <summary> 
     /// name of app package 
     /// </summary> 
     public string PackageName; 
     /// <summary> 
     /// version of app 
     /// </summary> 
     public string Version; 
     /// <summary> 
     /// os 
     /// </summary> 
     public string OperatingSystem; 
     /// <summary> 
     /// device manufacturer 
     /// </summary> 
     public string Manufacturer; 
     /// <summary> 
     /// device model 
     /// </summary> 
     public string Model; 
     /// <summary> 
     /// product id of app 
     /// </summary> 
     public string ProductID; 
     /// <summary> 
     /// windows phone version 
     /// </summary> 
     public string WindowsPhone; 
     /// <summary> 
     /// windows version 
     /// </summary> 
     public string Windows; 
    } 

回答

5

我能够做一个职位作为崩溃/上传端点的文档中描述的格式的日志后(http://support.hockeyapp.net/kb/api/api-crashes#-u-post-api-2-apps-app_id-crashes-upload-u-)。

虽然我最终撞到了“崩溃/”,这从我的理解是不同于崩溃/上传(因此,这是一个解决方案,打一个无证的端点)。

private static readonly string HOCKEYUPLOADURL = @"https://rink.hockeyapp.net/api/2/apps/{0}/crashes/"; 

    private static async Task SendDataAsync(String log, String userID, String contact, String description) { 
      string rawData = ""; 
      rawData += "raw=" + Uri.EscapeDataString(log); 
      if (userID != null) { 
       rawData += "&userID=" + Uri.EscapeDataString(userID); 
      } 
      if (contact != null) { 
       rawData += "&contact=" + Uri.EscapeDataString(contact); 
      } 
      if (description != null) { 
       rawData += "&description=" + Uri.EscapeDataString(description); 
      } 
      WebRequest request = WebRequest.Create(new Uri(String.Format(HOCKEYUPLOADURL, HOCKEYAPPID))); 

      request.Method = "POST"; 
      request.ContentType = "application/x-www-form-urlencoded"; 
      using (Stream stream = await request.GetRequestStreamAsync()) { 
       byte[] byteArray = Encoding.UTF8.GetBytes(rawData); 
       stream.Write(byteArray, 0, rawData.Length); 
       stream.Flush(); 
      } 

      try { 
       using (WebResponse response = await request.GetResponseAsync()) { } 
      } 
      catch (WebException e) { 
       WriteLocalLog(e, "HockeyApp SendDataAsync failed"); 

      } 

     } 
+1

我不确定这是不是存在于2015年,但今天有Microsoft.HockeyApp.HockeyClient.Current.TrackException(ex,properties);它在HockeyApp.Core包 – batmaci 2017-01-03 17:16:48

+0

可能不存在。不再和曲棍球一起工作了,但是如果你提交了一个答案,而其他人确认了,那么我将把你的答案设定为已接受的答案(我可以这样做,它已经有一段时间了?)。 – Theyouthis 2017-01-03 18:52:15

+0

如果我可能会问,您使用了什么替代方法以及哪种类型的应用程序? – batmaci 2017-01-03 18:58:47