I Think it's really important to monitor apps. Of course the most important part is to log errors in the app. But I also like to track how my users uses my apps. For the lastest app I have built I have used a monitoring tool from Xamarin called Insights, http://xamarin.com/insights.
While I alwas have crossplatform and testability in mind when I buildning apps I first create a logger interface.
public interface ILogger { Task InitializeAsync(); //Log exceptions void LogException(Exception ex); //Log information about events, for example view navigation Task TrackAsync(string identifier, Dictionary<string, string> details = null); //Log information about a user Task Identify(string userId, Dictionary<string, string> details = null); } |
While Xamarin Insights is compatible with Portable Class Library I writing the implementation in a project that I can share between platforms.
public class InsightsLogger : ILogger { public virtual Task InitializeAsync() { } public void LogException(Exception ex) { Insights.Report(ex, ReportSeverity.Error); } public Task TrackAsync(string identifier, Dictionary<string, string> details = null) { Insights.Track(identifier, details); } public Task Identify(string userId, Dictionary<string, string> details = null) { Insights.Identify(userId, details); } } |
The InitializeAsync method is virtual so it can be overridden, when using Xamarin Insights each platform has to have the Initialize code. Because of that I also need to create a logger class for each platform.
While I don't want errors from development together with production data I use to create two apps in Insights, one for development and one for production. I using conditional compile for to initialize with the right app key.
public class WinPhoneInsightsLogger : Logging.InsightsLogger { public override async Task Initialize() { #if DEBUG Insights.Initialize("key for debug use"); #else Insights.Initialize("key for production use"); #endif } } |
if you want to read more about Xamarin Insights you can do it here, http://xamarin.com/insights