Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 444|回复: 0

ExceptionLess ASP.NET MVC 异常日志框架

[复制链接]
  • TA的每日心情
    奋斗
    2 小时前
  • 签到天数: 782 天

    [LV.10]以坛为家III

    2049

    主题

    2107

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    720516
    发表于 2021-6-3 10:24:16 | 显示全部楼层 |阅读模式

    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 官方创建账号

    11

     

     

    2 创建项目

    如果托管在http://exceptionless.com/这个上面,大于一个项目是需要收费的。   

    可以自己部署一套源码放到IIS上面  

    大家可以参考

     https://www.cnblogs.com/uptothesky/p/5864863.html

     

     

    3 ApiKey

    11

     

     

     

     

     

     

     

     

     

    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 运行项目

    1

     

    然后刷新 https://be.exceptionless.io/dashboard

    1

    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();
            }
    
        }

    2

    可以看到一些项目和日志的基本信息,比如Event Type,Level以及标签Tags

    1

     

    7 ControllerName/actionName 注解

    原理:根据swagger一样  根据xml方式获取方法注解

    先右键项目 

    11

    然后在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就能很直观看到了

    2

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-8-22 22:48 , Processed in 0.059569 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表