Micrcroft App Center
介绍
App Center主要用到的是异常的捕获和事件分析,可以在代码中埋点,把想要的事件记录传到App Center,可以在有异常的时候吧异常的内容发送,和在程序崩溃时把崩溃信息记录下来,当应用再次启动时,会把上次记录好的崩溃信息传回, 这里比较好的一点是支持附件的上传,并且这里的免费版可以保存最多90天。下面是官方介绍:
开发人员可以使用 App Center 来生成、测试和分发应用程序。部署应用后,开发人员可以使用分析和诊断服务监视应用的状态和使用情况。
相关具体内容可以参考官方文档Visual Studio App Center Docs。
首先用账号登录进去,然后在主页可以看到所有的应用菜单,add new可以新建应用或者组织。
新建一个组织
输入组织的名字就可以创建成功,在这里可以看到组织里有apps,就是组织的所有应用。然后可以对人员管理:合作者,团队,分配组。最后可以最组织进行管理,这里的设置可以设置组织名和组织的url,图标等。这里还有付费和云服务等功能,具体看官方文档。
新建一个应用
输入应用名称,选择图标,设置发行类型,所有者,操作系统和平台。创建成功的所有应用都会在all apps显示。进去可以看到可以对应用进行菜单栏。这里演示了一些常用的基本操作。
概述Overview
首先需要NuGet包到解决方案中,安装Microsoft.AppCenter.Analytics和Microsoft.AppCenter.Crashes包,这两个一个是采集事件埋点一个是崩溃日志报告。更多的学习资料和相关API都在官方帮助文档查到。
这里是开启App Center。
string userId = System.Net.Dns.GetHostName();
#if DEBUG
userId += "-DEBUG";
#endif
AppCenter.SetUserId(userId);
AppCenter.SetCountryCode("CN");
AppCenter.Start(Constants.AppSecret, // 这里我作为常量存起来了,在网页上的guid---"e6e7e15a-4dd5-4de9-a8df-f09310853959"
typeof(Analytics),
typeof(Crashes));
分析Analytics
这里可以看到分析的Overview显示了活跃的用户的折线图,每天访问的用户,会话的时间段,使用的设备,操作系统。
还可以看到用户的国家信息和语言,还有应用的版本使用情况。
这里的Events是对事件进行分析。点进去可以看到具体的信息。
这里的Log flow是所有会话的信息,当app开启会话一直到结束所有的事件信息都会在这里显示。时间是UTC时间。
这里是对事件进行分析上传。
Analytics.TrackEvent("Search", new Dictionary<string, string>() { { "pageName", text } });
Analytics.TrackEvent("Use", new Dictionary<string, string>() { { "pageName", this.GetType().Name } });
诊断Diagnostics
这里的Issues是所有的问题,这里可以分为让应用崩溃的异常Crashes的和记录的异常Errors。
点进去可以查看到异常的详细信息,点击报告Reports可以查看传过来的用户信息和异常的日志附件,下载就可以查看异常日志。
这里是对崩溃记录上传的附件,直接把最新的日志上传回去了。
Crashes.GetErrorAttachments = (ErrorReport) =>
{
DirectoryInfo directoryInfo = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory + "\\Log\\Error");
var fileInfos = directoryInfo.GetFiles();
Array.Sort(fileInfos, delegate (FileInfo x, FileInfo y) { return y.CreationTime.CompareTo(x.CreationTime); });
Logger.Log.Error(string.Format("program crashes, last start time {{{0}}}, error timr {{{1}}}, {2}", ErrorReport.AppStartTime.ToLocalTime(), ErrorReport.AppErrorTime.ToOffset(new TimeSpan(8, 0, 0)), ErrorReport.StackTrace));
return new ErrorAttachmentLog[]
{
ErrorAttachmentLog.AttachmentWithBinary(File.ReadAllBytes(fileInfos[0].FullName),fileInfos[0].Name,"text")
};
};
这里是在异常日志中把异常信息上传。
public static void Error(object message)
{
if (message is Exception exception)
{
Crashes.TrackError(exception);
}
else
{
Crashes.TrackError(new Exception(message.ToString()));
}
LogManager.GetLogger(GetCurrentMethodFullName()).Error(message);
}
public static void Error(object message, Exception exception)
{
Crashes.TrackError(exception);
LogManager.GetLogger(GetCurrentMethodFullName()).Error(message, exception);
}