In the next release of the SQL Server Compact & SQLite Toolbox, which is currently available as a Release Candidate, I will start using ExceptionLess.com for Error Reporting and Feature Usage tracking. In this blogpost, I will describe the few steps required to integrate the Exceptionless client with a Visual Studio extension.
I have used RedGate SmartAssembly until now for this, but will stop doing so for a few reasons:
- The build process is cumbersome with SmartAssembly, as it is mainly an obfuscation tool, and therefore modifies the add-in assembly itself during build (Link to my blog post)
- The desktop client is clunky, and only runs from a single PC
- The underlying web service is slow if you have a large number of error and feature usage reports
Exceptionless.com is a hosted web service, that allows you to collect error, feature and log reports online from a variety of clients. Simply sign up, get your API key and install the NuGet package for your client and you are ready to go. All your exceptions and logs are then available on the portal. The project is Open Source, and you can host it on your own servers with Azure or on premise. There are both free and paid plans available.
Invoking Error Reporting and Feature Tracking in Code
As the Toolbox is an add-in, I prefer not to catch any unhandled Visual Studio exceptions, but would still like to be able to report any errors occurring in the Toolbox, in order to be able to improve it. In addition I would like to track “feature usage” information, in order to know which features are most popular, and also track statistical information like the version of Visual Studio in use (as the Toolbox runs under the following Visual Studio versions: 2010, 2012, 2013, 2015. The Exceptionless client easily allows you to do this.
First sign up at the portal to get your API key, you can start with the free plan to try out the solution, and later upgrade to a paid plan.
Install the signed WPF package in your extension project (you must use the signed package with a Visual Studio extension)
Alternatively download the NuGet packages, unzip and extract the following three files and include them in your lib folder and reference them from your project. (I did that to avoid NuGet Packages in my project):
Exceptionless.Extras.dll, Exceptionless.Portable.dll, Exceptionless.Wpf.dll
In your overridden package Initalize method, register your API key:
using Exceptionless; … ExceptionlessClient.Default.Configuration.ApiKey = "your api key";
Then to log handled exceptions, use the ToException() extension method:
using Exceptionless; … var ver = SqlCeToolboxPackage.VisualStudioVersion.ToString(2); ex.ToExceptionless() .AddObject(ver, "VsVersion") .Submit();
Notice the fluent API that allows you to add custom information and objects to the error report.
In addition, you can log feature usage as follows:
using Exceptionless; … ExceptionlessClient.Default.SubmitFeatureUsage(feature);
Where feature is the name (key) you have assigned to the feature, see screenshot above.
All in all a very simple and painless integration. You can now monitor exceptions and potentially fix almost before your users report them, and use feature counts to prioritize future feature work.
Happy exception monitoring!