【UWP】在 UWP 中使用 Exceptionless 进行遥测
2020年4月10日更新:
官方 nuget 新版本已发布
https://www.nuget.org/packages/Exceptionless
2020年1月17日更新:
nightly build 版本已发布
https://www.myget.org/feed/exceptionless/package/nuget/Exceptionless
2020年1月16日更新:
PR 已合并了,等待官方发布新的 nuget 包
2020年1月10日更新:
clone 官方源码调了一下找到问题所在了,UWP 的 release 模式下, Assembly.GetCallingAssembly() 不可用导致,已给 Exceptionless 发 PR 了。
https://github.com/exceptionless/Exceptionless.Net/pull/219
2020年1月9日更新:
目前 Exceptionless 存在 bug,导致在 UWP 的 release 模式下不可用,已给官方提 bug
https://github.com/exceptionless/Exceptionless.Net/issues/218
各位看官暂时不用往下看了。
前几个星期在公司的测试服务器上搭建了 Exceptionless 对公司的 Asp.net core 项目进行遥测。在之前都是远程桌面登录上去,然后去翻日志文件看有没有异常,效率极其的低。用了 Exceptionless 之后,效率高了不少,而且能收集到更多信息了。
最近准备要过年了,项目也上线了一段时间趋于稳定,算是比较闲了一点。想着要不把手上的 UWP 项目也加上 Exceptionless 进行遥测吧,毕竟微软商店的 Dashboard 那异常也几乎是看不出啥的,而且这测试服务器性能又是过剩的,不用白不用。
但我一操作起来,就发现了个大问题,Exceptionless 官方并没有提供 UWP 的库(Winform、WPF、asp.net core 的都有)。翻查了 github 上相关的 issue,官方建议是用 .net standard 版本的。然而实际操作之后,我发现还需要额外的代码来处理 UWP 中的 UnhandledException,本文就记录一下。
首先当然是在 Exceptionless 平台上创建项目获取 ApiKey 了,这个就不多说了。然后 UWP 项目引用 Exceptionless 的 nuget 包。
在 App.xaml.cs 的构造函数中添加 SetUpExceptionless 代码:
public App()
{
this.InitializeComponent();
this.Suspending += OnSuspending;
SetUpExceptionless();
}
然后先初步实现 SetUpExceptionless 方法:
private void SetUpExceptionless()
{
var client = ExceptionlessClient.Default;
client.Configuration.ServerUrl = "";
client.Configuration.ApiKey = ""; client.Startup();
}
由于是自建 Exceptionless 平台,所以需要配置一下 ServerUrl。ApiKey 配置为从平台获取到的 ApiKey。
接下来是处理 UnhandledException,在 UWP 平台中,有两种情况,一种是在 App 类上触发的,另一种是在 AppDomain 上触发的。这两种我们都要监听到。但如何监听呢,这里先看看官方在 WPF 平台是如何实现的:

主要是图上红框的两行,第一行主要是捕获线程的异常,第二行捕获了 App 的异常。而捕获线程异常的方法内部用到了 Winform 的类,这里我们就忽略,因为 UWP 里没有这些类,而且 UWP 中非 UI 线程的异常是可以通过 AppDomain.UnhandledException 事件来捕获的。这里我们看第二行的实现:

可见是对 System.Windows.Application.Current.DispatcherUnhandledException 事件进行了订阅,然后给 Exceptionless。
依样画葫芦,完善我们的 SetUpExceptionless 方法:
private void SetUpExceptionless()
{
var client = ExceptionlessClient.Default;
client.Configuration.ServerUrl = "";
client.Configuration.ApiKey = ""; UnhandledException += (sender, args) =>
{
var contextData = new ContextData();
contextData.MarkAsUnhandledError();
contextData.SetSubmissionMethod("App_UnhandledException"); args.Exception.ToExceptionless(contextData, ExceptionlessClient.Default).Submit(); client.ProcessQueue();
};
AppDomain.CurrentDomain.UnhandledException += (sender, args) =>
{
var exception = args.ExceptionObject as Exception;
if (exception == null)
{
return;
} var contextData = new ContextData();
contextData.MarkAsUnhandledError();
contextData.SetSubmissionMethod("AppDomain_UnhandledException"); exception.ToExceptionless(contextData, ExceptionlessClient.Default).Submit(); client.ProcessQueue();
}; client.Startup();
}
接下来我们测试一下是否起效,先手动抛个异常,我就直接建一个 Button,然后 Click 抛个异常好了。
private void TestButton_Click(object sender, RoutedEventArgs e)
{
throw new Exception("测试 Exceptionless 集成");
}
运行后,点击按钮,然后 App 炸掉之后我们去看 Exceptionless 平台。

完美!
【UWP】在 UWP 中使用 Exceptionless 进行遥测的更多相关文章
- UWP 在 WebView 中执行 JavaScript 代码(用于模拟用户输入等) - walterlv
原文:UWP 在 WebView 中执行 JavaScript 代码(用于模拟用户输入等) - walterlv UWP 在 WebView 中执行 JavaScript 代码(用于模拟用户输入等) ...
- UWP: 在 UWP 中使用 Entity Framework Core 操作 SQLite 数据库
在应用中使用 SQLite 数据库来存储数据是相当常见的.在 UWP 平台中要使用 SQLite,一般会使用 SQLite for Universal Windows Platform 和 SQLit ...
- [UWP]理解ControlTemplate中的VisualTransition
1. 前言 VisualTransition是控件模板中的重要组成部分,无论是自定义控件或者修改控件样式都会接触到VisualTransition.明明这么重要,博客园上好像都没多少关于VisualT ...
- [UWP]在UWP平台中使用Lottie动画
最近QQ影音久违的更新了,因为记得QQ影音之前体验还算不错(FFmepg的事另说),我也第一时间去官网下载体验了一下,结果发现一些有趣的事情. 是的,你没看错,QQ影音主界面上这个动画效果是使用Lot ...
- UWP 在 WebView 中执行 JavaScript 代码(用于模拟用户输入等)
UWP 中使用 WebView 时可以在网页中额外执行一些代码.于是你几乎可以在网页上做任何事情,那些你可以在浏览器控制台中做的事情. 本文将介绍做法. 本文内容 准备环境 执行 JavaScript ...
- UWP 流畅设计中的光照效果(容易的 RevealBorderBrush 和不那么容易的 RevealBackgroundBrush)
在 Windows 10.0.16299 中,RevealBrush 被引入,可以实现炫酷的鼠标滑过高亮效果和点击光照.本文将告诉大家如何完整地实现这样的效果. Reveal 的效果(自带) 在微软官 ...
- 在UWP的XAML中使用原始类型
问题: I'm trying to access the system namespace for StaticResource variables in XAML on UWP. Here's (m ...
- UWP 在Xaml中使用cu和fcu资源
之前一直不知道这个,最近看微软的WTS项目更新,在Xaml中定义了 xmlns:fcu ="http://schemas.microsoft.com/winfx/2006/xaml/pres ...
- UWP 查找模板中的控件
这个标题我也不知道咋起,意思说一下你就明白. 1. 对官方控件的模板进行定制修改,以满足多样化需求,还有漂亮的UI 比如ListView,GridView等. 2. 在设计的情况下并没有这个控件,而在 ...
随机推荐
- thinkphp3关闭Runtime中的日志方法
将LOG_LEVEL允许记录的日志级别设置为空,则不会记录日志
- Python Special Methods - 特殊方法
特殊方法 特殊方法的存在是为了给 Python 解释器调用的,通常自己并不需要直接调用它们.也就是说不应该使用 my_object.__len__() 这种写法,而应该使用 len(my_object ...
- Linux下安装 php imagick扩展
今天小编 由于工作需求用到了 imagick 这个扩展 服务器环境是 lnmp 架构下面稍微来介绍下 这个 东东 imagick是一个PHP的扩展,用ImageMagick提供的API来进行图片的创 ...
- Apache httpd.conf配置文件 2(Main server configuration)
### Section 2: 'Main' server configuration # # The directives in this section set up the values used ...
- 怎么用wait、notify巧妙的设计一个Future模式?
我们知道多线程可以实现同时执行多个任务(只是看起来是同时,其实是CPU的时间片切换特别快我们没感觉而已). 现在假设一个做饭的场景,你没有厨具也没有食材.你可以去网上买一个厨具,但是这段时间,你不需要 ...
- matplotlib如何显示中文
问题:matplotlib不能渲染中文 想设定为中文字体,网上搜索的方法几乎都是下面这样,已经把字体拷贝到了程序目录下了,然而并没有生效 plt.rcParams [ font.sans-serif' ...
- 从零开始学习MySQL全文索引
目录 一.为什么要用全文索引 二.什么是全文索引 三.如何创建全文索引 四.创建测试数据 五.查询-使用自然语言模式 六.查询-使用布尔模式(强大的语法) 语法 示例 七.查询-使用扩展模式 八.注意 ...
- linux中权限管理命令(chmod/chown/chgrp/unmask)
目录 chmod chown chgrp umask chmod 解释 命令名称:chmod 命令英文原意:change the permissions mode of a file 命令所在路径:/ ...
- localStorage 存储
localStorage 的优势 localStorage 拓展了 cookie 的 4K 限制. localStorage 会可以将第一次请求的数据直接存储到本地,这个相当于一个 5M 大小的针对于 ...
- java设计模式--迪米特法则
基本介绍 1.一个对象应该对其他对象保持最少的了解 2.类与类关系越密切,耦合度越大 3.迪米特法则又叫最少知道原则,即一个类对自己依赖的类知道的越少越好.也就是说,对于被依赖的类不管多么复杂,都尽量 ...