iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >如何使用ActionFilterAttribute实现API日志的记录
  • 855
分享到

如何使用ActionFilterAttribute实现API日志的记录

2024-04-02 19:04:59 855人浏览 八月长安
摘要

本篇内容主要讲解“如何使用ActionFilterAttribute实现api日志的记录”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用ActionFil

本篇内容主要讲解“如何使用ActionFilterAttribute实现api日志的记录”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用ActionFilterAttribute实现API日志的记录”吧!

实现方式

1、首先在进入action的时候,定义OnActionExecuting。

public override void OnActionExecuting(ActionExecutinGContext context)         {             base.OnActionExecuting(context);              // 后续添加了获取请求的请求体,如果在实际项目中不需要删除即可             long contentLen = context.HttpContext.Request.ContentLength == null ? 0 : context.HttpContext.Request.ContentLength.Value;             if (contentLen > 0)             {                 // 读取请求体中所有内容                 System.IO.Stream stream = context.HttpContext.Request.Body;                 if (context.HttpContext.Request.Method == "POST")                 {                     stream.Position = 0;                 }                 byte[] buffer = new byte[contentLen];                 stream.Read(buffer, 0, buffer.Length);                 // 转化为字符串                 RequestBody = System.Text.Encoding.UTF8.GetString(buffer);             }              ActionArguments = Newtonsoft.JSON.jsonConvert.SerializeObject(context.ActionArguments);              Stopwatch = new Stopwatch();             Stopwatch.Start();         }

2、定义Stopwatch ,计算方法的耗时。

private string ActionArguments { get; set; }          /// <summary>         /// 请求体中的所有值         /// </summary>         private string RequestBody { get; set; }          private Stopwatch Stopwatch { get; set; }

3、结束的时候,把信息打印出来OnActionExecuted。

public override void OnActionExecuted(ActionExecutedContext context)         {             base.OnActionExecuted(context);             Stopwatch.Stop();              string url = context.HttpContext.Request.Host + context.HttpContext.Request.Path + context.HttpContext.Request.QueryString;             string method = context.HttpContext.Request.Method;             string controller = context.Controller.ToString();             string action = context.ActionDescriptor.DisplayName;             string token = "";             if (context.HttpContext.Request != null && context.HttpContext.Request.Headers != null && context.HttpContext.Request.Headers["Authorization"].Count > 0)             {                 token = context.HttpContext.Request.Headers["Authorization"];             }             string qs = ActionArguments;             dynamic result = context?.Result?.GetType()?.Name == "EmptyResult" ? new { Value = "无返回结果" } : context?.Result as dynamic;              string res = "在返回结果前发生了异常";             try             {                 if (result != null)                 {                     res = Newtonsoft.Json.JsonConvert.SerializeObject(result.Value);                 }             }             catch (System.Exception)             {                 res = "日志未获取到结果,返回的数据无法序列化";             }              NLogger.Info(                 $"地址:{url} \n " +                   $"controller:{controller} \n " +                     $"action:{action} \n " +                       $"token:{token} \n " +                 $"方式:{method} \n " +                 $"请求体:{RequestBody} \n " +                 $"参数:{qs}\n " +                 $"结果:{res}\n " +                 $"耗时:{Stopwatch.Elapsed.TotalMilliseconds} 毫秒(指控制器内对应方法执行完毕的时间)");         }

4、控制器调用LogAttribute。

/// <summary>     ///     /// </summary>     [Produces("application/json")]     [LogAttribute]     [CustomExceptionFilterAttribute]     public class DefaultController : Controller     {     }

完整代码

using CompanyName.ProjectName.Core; using Microsoft.Aspnetcore.mvc.Filters; using System.Diagnostics;  namespace CompanyName.ProjectName.HttpApi.Host.Code {     /// <summary>     /// 拦截器     /// </summary>     public class LogAttribute : ActionFilterAttribute     {         private string ActionArguments { get; set; }          /// <summary>         /// 请求体中的所有值         /// </summary>         private string RequestBody { get; set; }          private Stopwatch Stopwatch { get; set; }          /// <summary>         ///         /// </summary>         /// <param name="context"></param>         public override void OnActionExecuting(ActionExecutingContext context)         {             base.OnActionExecuting(context);              // 后续添加了获取请求的请求体,如果在实际项目中不需要删除即可             long contentLen = context.HttpContext.Request.ContentLength == null ? 0 : context.HttpContext.Request.ContentLength.Value;             if (contentLen > 0)             {                 // 读取请求体中所有内容                 System.IO.Stream stream = context.HttpContext.Request.Body;                 if (context.HttpContext.Request.Method == "POST")                 {                     stream.Position = 0;                 }                 byte[] buffer = new byte[contentLen];                 stream.Read(buffer, 0, buffer.Length);                 // 转化为字符串                 RequestBody = System.Text.Encoding.UTF8.GetString(buffer);             }              ActionArguments = Newtonsoft.Json.JsonConvert.SerializeObject(context.ActionArguments);              Stopwatch = new Stopwatch();             Stopwatch.Start();         }          /// <summary>         ///         /// </summary>         /// <param name="context"></param>         public override void OnActionExecuted(ActionExecutedContext context)         {             base.OnActionExecuted(context);             Stopwatch.Stop();              string url = context.HttpContext.Request.Host + context.HttpContext.Request.Path + context.HttpContext.Request.QueryString;             string method = context.HttpContext.Request.Method;             string controller = context.Controller.ToString();             string action = context.ActionDescriptor.DisplayName;             string token = "";             if (context.HttpContext.Request != null && context.HttpContext.Request.Headers != null && context.HttpContext.Request.Headers["Authorization"].Count > 0)             {                 token = context.HttpContext.Request.Headers["Authorization"];             }             string qs = ActionArguments;             dynamic result = context?.Result?.GetType()?.Name == "EmptyResult" ? new { Value = "无返回结果" } : context?.Result as dynamic;              string res = "在返回结果前发生了异常";             try             {                 if (result != null)                 {                     res = Newtonsoft.Json.JsonConvert.SerializeObject(result.Value);                 }             }             catch (System.Exception)             {                 res = "日志未获取到结果,返回的数据无法序列化";             }              NLogger.Info(                 $"地址:{url} \n " +                   $"controller:{controller} \n " +                     $"action:{action} \n " +                       $"token:{token} \n " +                 $"方式:{method} \n " +                 $"请求体:{RequestBody} \n " +                 $"参数:{qs}\n " +                 $"结果:{res}\n " +                 $"耗时:{Stopwatch.Elapsed.TotalMilliseconds} 毫秒(指控制器内对应方法执行完毕的时间)");         }     } }

到此,相信大家对“如何使用ActionFilterAttribute实现API日志的记录”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: 如何使用ActionFilterAttribute实现API日志的记录

本文链接: https://www.lsjlt.com/news/83647.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何使用ActionFilterAttribute实现API日志的记录
    本篇内容主要讲解“如何使用ActionFilterAttribute实现API日志的记录”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用ActionFil...
    99+
    2024-04-02
  • 如何在PHP API中实现高效的日志记录?
    PHP API是Web应用程序的核心部分,它们允许应用程序与其他服务进行通信。在开发Web应用程序时,日志记录是一个非常重要的方面。通过日志记录,您可以追踪应用程序中发生的事件,从而更好地了解应用程序的运行状况,并找到潜在的问题。本文将介绍...
    99+
    2023-10-08
    api 日志 编程算法
  • 如何在PHP API中实现可靠的日志记录?
    PHP是一种广泛使用的服务器端编程语言,很多应用程序都使用PHP来实现。在应用程序中,日志记录是非常重要的,因为它可以帮助开发人员识别和解决问题。在本文中,我们将讨论如何在PHP API中实现可靠的日志记录。 为什么需要日志记录? 在应用程...
    99+
    2023-10-08
    api 日志 编程算法
  • 如何使用Func<T, TResult> 委托实现API日志的记录
    这篇文章主要介绍了如何使用Func<T, TResult> 委托实现API日志的记录,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下...
    99+
    2024-04-02
  • 如何使用 Golang 构建 RESTful API 并使用日志记录?
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-16
  • ASP.NET Core如何使用Log4net实现日志记录功能
    这篇文章主要介绍“ASP.NET Core如何使用Log4net实现日志记录功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“ASP.NET Core如何使用Log4net实现日...
    99+
    2023-06-29
  • Python 日志系统:使用缓存 API 使日志记录更高效。
    在开发过程中,日志记录是一个非常重要的环节。它可以帮助我们在代码出错时快速定位问题,也可以帮助我们了解程序运行的情况。Python 提供了一个非常强大的日志系统,可以帮助我们高效地记录日志。而在这个日志系统中,使用缓存 API 可以让日志...
    99+
    2023-08-25
    日志 缓存 api
  • 如何在 Python 中使用缓存 API 改进您的日志记录?
    在 Python 中,缓存是一种优化技术,它可以显著提高应用程序的性能。缓存可以存储计算结果、数据库查询结果、文件读取结果等等,这些结果可以被多次重复使用,避免重复的计算、查询和读取,从而减少应用程序的响应时间。在本文中,我们将介绍如何在 ...
    99+
    2023-08-24
    日志 缓存 api
  • ASP.NETCore使用Log4net实现日志记录功能
    一、安装Log4net 1、使用Nuget包进行安装 在依赖项上面右键,选择“管理NuGet程序包”,如下图所示: 在浏览界面输入log4net,然后点击安...
    99+
    2024-04-02
  • 如何在Java项目中使用API打包和记录日志?
    在Java项目中,API打包和记录日志是非常重要的部分。API打包可以将代码打包成一个可复用的模块,方便其他开发者在其项目中引用,而记录日志则可以帮助开发者更好地了解应用程序运行的情况。在本文中,我们将介绍如何在Java项目中使用API打包...
    99+
    2023-08-20
    日志 打包 api
  • Python中如何使用numpy记录日志?
    Python是一种广泛使用的编程语言,其强大的数据处理能力和丰富的第三方库使其成为数据科学和机器学习领域的首选语言。在这些应用程序中,记录日志是一个非常重要的任务,因为它可以帮助开发人员找到应用程序中的错误并进行适当的修复。在本文中,我们将...
    99+
    2023-08-10
    numpy 日志 linux
  • 如何在PHP API中使用编程算法来记录日志?
    PHP API是一种非常流行的Web开发工具,它可以让开发者更加高效地开发Web应用程序。在开发Web应用程序时,记录日志是非常重要的,因为它可以帮助开发者及时发现并解决问题。在本文中,我们将介绍如何在PHP API中使用编程算法来记录日志...
    99+
    2023-10-08
    api 日志 编程算法
  • Spring Boot如何使用AOP记录日志
    小编给大家分享一下Spring Boot如何使用AOP记录日志,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在项目开发中经常,日...
    99+
    2024-04-02
  • 如何使用Java重定向日志接口记录日志?
    当我们开发一个Java应用程序时,记录日志是非常重要的一个环节。Java提供了多种日志框架,如Log4j、Logback等。其中,重定向日志接口是一种常用的记录日志的方式。 在这篇文章中,我们将介绍如何使用Java重定向日志接口记录日志。我...
    99+
    2023-11-05
    重定向 日志 接口
  • Python 如何实现分布式日志记录?
    在现代应用程序的开发中,记录日志是非常重要的一项任务。日志记录可以帮助开发人员快速发现和解决程序中的问题。在分布式系统中,日志记录变得更加复杂,因为日志不仅需要记录每个节点的信息,还需要记录节点之间的交互信息。本文将介绍如何使用 Pyth...
    99+
    2023-07-22
    日志 分布式 函数
  • ASP.NET Core如何使用NLog记录日志
    这篇文章主要介绍了ASP.NET Core如何使用NLog记录日志,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、前言在所有的应用程序中,日志功能是不可或缺的模块...
    99+
    2023-06-29
  • Java中如何使用Git记录日志?
    Git是一种流行的版本控制工具,可以追踪代码的变化并记录代码的历史。Java开发者可以使用Git来管理项目,并使用Git记录项目的日志。本文将介绍如何在Java中使用Git记录日志。 一、Git的基本概念 在开始介绍如何在Java中使用G...
    99+
    2023-07-06
    git 日志 编程算法
  • 如何利用Java技术实现高效的日志记录?
    在现代软件开发中,日志记录是必不可少的一部分。它可以帮助开发人员快速定位错误,并且为系统的运行情况提供有价值的信息。在Java技术中,有很多方式可以实现日志记录。本篇文章将介绍如何利用Java技术实现高效的日志记录。 一、使用Java自带的...
    99+
    2023-09-05
    日志 开发技术 分布式
  • ASP 和 Django 日志记录:如何实现同步?
    在许多 Web 应用程序中,日志记录是一个至关重要的方面。它可以帮助开发人员及时诊断问题,并提供有价值的信息用于监视和优化应用程序。ASP 和 Django 都提供了强大的日志记录功能,但是如何将它们同步起来呢?本文将探讨如何实现 ASP...
    99+
    2023-11-11
    同步 django 日志
  • 如何使用 Git 记录 PHP 项目日志?
    Git 是一款强大的版本控制工具,它可以帮助我们记录项目的历史变更,同时也是开源社区中广泛使用的工具。对于 PHP 开发者来说,如何使用 Git 记录项目日志是一个非常重要的问题。在本文中,我们将介绍如何使用 Git 记录 PHP 项目日志...
    99+
    2023-09-07
    npm git 日志
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作