Exceptionless
一個開源的實時的日志收集框架,它可以應用在基於 ASP.NET,ASP.NET Core,Web API,Web Forms,WPF,Console,ASP.NET MVC 等技術開發的應用程序中,並且提供了REST接口可以應用在 Javascript,Node.js 中。它將日志收集變得簡單易用並且不需要了解太多的相關技術細節及配置。
ExceptionLess官網:http://exceptionless.com/
GitHub:https://github.com/exceptionless/Exceptionless
Quick Start
1 官方創建賬號
2 創建項目
如果托管在http://exceptionless.com/這個上面,大於一個項目是需要收費的。
可以自己部署一套源碼放到IIS上面
大家可以參考
https://www.cnblogs.com/uptothesky/p/5864863.html
3 ApiKey
4 Visual Studio 新建立一個ASP.NET MVC項目
5 Web.Config中找到exceptionless節點,apikey屬性值設置為官方給你的key
Install-Package Exceptionless.Mvc 成功以后 如下代碼會自動加入到web.config
<configSections> <section name="exceptionless" type="Exceptionless.ExceptionlessSection, Exceptionless" /> 自動加入1 </configSections> <appSettings> <add key="webpages:Version" value="3.0.0.0" /> <add key="webpages:Enabled" value="false" /> <add key="ClientValidationEnabled" value="true" /> <add key="UnobtrusiveJavaScriptEnabled" value="true" /> <add key="ProjectName" value="HelloWord"/> </appSettings> <exceptionless apiKey="ducXJBe0wLD1yq6IhjGJwyCNnakual1Q7lQFGi1H" /> 自動加入2 將key跟環成你自己的就行
配置完畢 看看效果如何
/// <summary> /// Your application description page. /// </summary> /// <returns></returns> public ActionResult About() { ViewBag.Message = "Your application description page."; throw new Exception("Your application description page."); }
F5 運行項目
然后刷新 https://be.exceptionless.io/dashboard
6 集成Logger 日志 統計
創建ExceptionLessLog類
using Exceptionless; using Exceptionless.Logging; using Microsoft.VisualBasic.Logging; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace HelloWord.Models { public class ExceptionLessLog:Log { /// <summary> /// 跟蹤 /// </summary> public static void Trace(string message, params string[] tags) { ExceptionlessClient.Default.CreateLog(message, LogLevel.Trace).AddTags(tags).Submit(); } /// <summary> /// 調試 /// </summary> public static void Debug(string message, params string[] tags) { ExceptionlessClient.Default.CreateLog(message, LogLevel.Debug).AddTags(tags).Submit(); } /// <summary> /// 信息 /// </summary> public static void Info(string message, params string[] tags) { ExceptionlessClient.Default.CreateLog(message, LogLevel.Info).AddTags(tags).Submit(); } /// <summary> /// 警告 /// </summary> public static void Warn(string message, params string[] tags) { ExceptionlessClient.Default.CreateLog(message, LogLevel.Warn).AddTags(tags).Submit(); } /// <summary> /// 錯誤 /// </summary> public static void Error(string message, params string[] tags) { ExceptionlessClient.Default.CreateLog(message, LogLevel.Error).AddTags(tags).Submit(); } } }
/// <summary> /// 首頁 /// </summary> public class HomeController : Controller { /// <summary> /// 用戶登錄了111111 /// </summary> /// <returns></returns> public ActionResult Index() { ExceptionLessLog.Info("用戶登錄了"); return View(); } /// <summary> /// Your application description page. /// </summary> /// <returns></returns> public ActionResult About() { ViewBag.Message = "Your application description page."; ExceptionLessLog.Debug("Your application description page."); return View(); } /// <summary> /// Your contact page. /// </summary> /// <param name="name">姓名</param> /// <returns></returns> public ActionResult Contact(string name) { ViewBag.Message = "Your contact page."; ExceptionLessLog.Error("Your contact page."); return View(); } }
可以看到一些項目和日志的基本信息,比如Event Type,Level以及標簽Tags
7 ControllerName/actionName 注解
原理:根據swagger一樣 根據xml方式獲取方法注解
先右鍵項目
然后在web.config 加入 value="你自己創建的項目名稱"
<add key="ProjectName" value="HelloWord"/>
public class MyActionFilter : ActionFilterAttribute { /// <summary> /// 方法執行后進行的操作 /// </summary> /// <param name="filterContext"></param> public override void OnActionExecuted(ActionExecutedContext filterContext) { var con = filterContext.Controller as Controller; var controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName; var actionName = filterContext.ActionDescriptor.ActionName; var proejctName = ConfigurationManager.AppSettings["ProjectName"] as string; //拿到包含注釋的xml文檔 var xml = XDocument.Load(con.Server.MapPath(@"~/bin/" + proejctName + ".XML")); //拿到方法上的注釋 //拿到方法上的注釋沒有參數的方法沒有(括號 var summary = (from member in xml.Elements("doc").Elements("members").Elements("member") where member.Attribute("name").Value.ToString().Contains("." + controllerName + "Controller." + actionName + "(") select member.Element("summary").Value).FirstOrDefault() ?? (from member in xml.Elements("doc").Elements("members").Elements("member") where member.Attribute("name").Value.ToString().Contains("." + controllerName + "Controller." + actionName) select member.Element("summary").Value).FirstOrDefault(); string des = $"{controllerName}/{actionName}/{summary}"; ExceptionlessClient.Default.CreateFeatureUsage(des).AddTags(summary).Submit(); } }
然后添加這個
public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); filters.Add(new MyActionFilter()); //添加此處代碼 } }
這樣Exceptionless就能很直觀看到了