前言

主要是记录一下实现的错误日志拦截,可以在拦截器里面控制返回的信息,把错误信息处理后返回给请求端。

代码实战

拦截器

    /// <summary>
/// 接口异常捕捉过滤器
/// </summary>
[AttributeUsage(AttributeTargets.All, AllowMultiple = false, Inherited = true)]
public class ApiErrorHandleAttribute : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
base.OnException(actionExecutedContext);
actionExecutedContext.Response = GetResponse(actionExecutedContext);
} /// <summary>
/// 捕捉异常后响应方法
/// </summary>
private HttpResponseMessage GetResponse(HttpActionExecutedContext actionExecutedContext)
{
var requesthost = actionExecutedContext.ActionContext.Request.RequestUri.ToString();//当前请求的地址,包括ip加接口地址
var method = actionExecutedContext.ActionContext.Request.Method.ToString();//当前请求是POST/GET/PUT/DELETE ……
var controller = actionExecutedContext.ActionContext.ActionDescriptor.ControllerDescriptor.ControllerType.FullName;//当前请求的控制器所在全路径:xxx.WebAPI.Controllers.xxxController
var action = actionExecutedContext.ActionContext.ActionDescriptor.ActionName; //当前请求的方法
var paramters = actionExecutedContext.ActionContext.ActionArguments; //获取当前请求的参数
var ip = HttpContext.Current.Request.UserHostAddress; LogHelper.Error($"错误信息:URL:{actionExecutedContext.Request.RequestUri},--参数信息:{paramters.ToJson()},--actionExecutedContext.Exception:{actionExecutedContext.Exception.ToJson()}");
var response = new { code = 506, message = $"{actionExecutedContext.Exception.Message},URL:{actionExecutedContext.Request.RequestUri}", ex = actionExecutedContext.Exception }; return JsonHelper.ToHttpResponseMessage(response);
} }

工具类方法

    public static class JsonHelper
{
/// <summary>
/// 转化为json格式的HttpResponseMessage
/// </summary>
public static HttpResponseMessage ToHttpResponseMessage(object obj)
{
string str;
if (obj is string || obj is char)
{
str = obj.ToString();
}
else
{
str = obj.ToJson();
}
var result = new HttpResponseMessage { Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "application/json") };
return result;
} /// <summary>
/// 转化为json字符串,默认的时间格式
/// </summary>
/// <param name="obj">要被转化的对象</param>
/// <returns>json字符串</returns>
public static string ToJson(this object obj)
{
return JsonConvert.SerializeObject(obj, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore, DateFormatString = "yyyy-MM-dd HH:mm:ss" });
}
}

ASP.NET 通过拦截器记录错误日志的更多相关文章

  1. ASP.NET MVC中Log4Net记录错误日志的使用

    第一.在管理NuGet程序包 =>下载 Log4Net 第二.在web.config配置Log4Net 1:在<configuration>节点下 <configSection ...

  2. ASP.NET记录错误日志的方式

    程序记录错误日志是一种看起来对一般用户没什么作用,但对程序开发者用处很大的东西,它能查出错误或异常的程序马迹.那么,常用的记录错误日志的方式有哪些呢? 大多数情况下使用的是 1.直接记录为txt/xm ...

  3. WebForm应用log4net记录错误日志——使用线程列队写入

    我的项目结构如下图: 日志帮助类库需要log4net包:工具—NuGet包管理器—管理解决方案NuGet程序包 线程日志帮助类 FlashLogger.cs 代码 using System; usin ...

  4. ASP.NET Core使用Elasticsearch记录NLog日志

    ASP.NET Core使用Elasticsearch记录NLog日志 1.新建一个 ASP.NET Core项目 2.安装Nuge包 运行:Install-Package NLog.Web.AspN ...

  5. spring mvc 通过拦截器记录请求数据和响应数据

    spring mvc 能过拦截器记录请求数据记录有很多种方式,主要有以下三种: 1:过滤器 2:HandlerInterceptor拦截器 3:Aspect接口控制器 但是就我个人所知要记录返回的数据 ...

  6. ASP.NET - 记录错误日志

    不需要像log4net/Nlog/Common Logging配置,简单好用. 不用增加声明logger对象,可记录当前执行状况. 可以定义 维护功能模板的开发人员,以便用功能模块对于开发人员. 出处 ...

  7. asp.net mvc中加入log4net记录错误日志

    直接上代码示例:https://share.weiyun.com/aff36f2547514cfefe129ebb8ccb28ef 首先添加加log4net的dll,推荐用nuget.... 贴上配置 ...

  8. Asp.Net MVC中记录错误日志保存到本地txt文件

    为了方便查询系统出错弄个错误日志出来对于维护运维来说是很有必要的. 1.在Asp.Net MVC项目中的App_Start添加一个用于处理异常类的文件ErrorLog让他继承HandleErrorAt ...

  9. Struts2拦截器记录系统操作日志

    前言 最近开发了一个项目,由于项目在整个开发过程中处于赶时间状态(每个项目都差不多如此)所以项目在收尾阶段发现缺少记录系统日志功能,以前系统都是直接写在每个模块的代码中,然后存入表单,在页面可以查看部 ...

  10. C# 记录错误日志

    程序的错误日志如何记录下来? 可以在遇到异常时,Catch异常,然后把异常的信息输出到txt文件中即可 /// <summary> /// 错误日志 /// </summary> ...

随机推荐

  1. [转帖]Redis压力测试——redis-benchmark

    liunx 安装 redis & redis benchmark 1.下载安装包 点击官网,下载stable版本 wget http://download.redis.io/releases/ ...

  2. [转帖]浅谈Armv8-A处理器

    https://www.elecfans.com/emb/dsp/202208291886182.html 众所周知,ARM是一家设计并授权处理器和相应IP(比如互连总线,中断处理器,图像处理器等等) ...

  3. Oracle 修改参数

    alter system set sga_max_size=30720M scope=spfile; alter system set sga_target=30720M; alter system ...

  4. 软件缺陷(bug)

    生活中我们肯定听过身边的朋友说过:'这tm就是个bug','你就是bug一样的存在' 等话语.当你听到这句话的时候或许有些懵逼或许认为这货说的什么玩意.其实当你想成为一名测试工程师的时候你就要天天和b ...

  5. CS231N Assignment1 SVM 笔记

    svm.ipynb 为SVM实现一个完全矢量化的损失函数 为其解析梯度实现完全矢量化表达式 使用数值梯度检查实现结果 使用验证集调整学习率和正则化 使用 SGD 优化损失函数 可视化最终学习权重 第一 ...

  6. Typescript中存取器getters和setters的使用

    1.存取器 存取器可以让我们可以有效的控制对,对象中的中的成员的访问. 可以通过getters和setters来进行操作 在typescript中分别对应 get 和 set 2.如何解决报错 typ ...

  7. vim 从嫌弃到依赖(10)——缓冲区列表

    之前的一系列文章主要介绍了vim文本相关的操作,并且也介绍了vim的几种模式.通过前面的内容,相信各位小伙伴们已经对vim有了一个基本的了解,同时也能够使用vim快速编辑文本,从这篇开始,我们将要介绍 ...

  8. .NET 6 使用 System.Drawing.Common 出现 The type initializer for ‘Gdip’ threw an exception 异常的解决办法

    出现问题的原因 在Linux环境部署.NET Core程序时,如果要到System.Drawing.Common引用会出现该问题,目前大量的第三方组件使用该Windows专用库,尤其是涉及图片处理.W ...

  9. Flask 实现文件上传下载

    Flask 针对文件的上传下载相关代码片段,多种方法,包括限制文件格式,大小等. 实现图片文件上传 # name: 简单的实现文件上传任务. import os from flask import F ...

  10. CE修改器入门:查找多级指针

    本关是第6关的加强版,CE 6.X 教程中的4级指针比5.X的要简单些.多级指针就像玩解谜游戏一样,谜团不只一个,盒子中还有盒子.这里面是4级指针,游戏中也有比如8级指针,12级指针等等,思路都是一样 ...