ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

IActionFilter记录日志

2022-05-03 21:01:55  阅读:157  来源: 互联网

标签:CustomActionFilterAttribute IActionFilter ILogger 记录 HttpContext context var 日志 


1、配置log4net查下以下链接

https://www.cnblogs.com/handsomeziff/p/16213689.html

2、添加类CustomActionFilterAttribute,继承Attribute,IActionFilter

 1 using Microsoft.AspNetCore.Mvc.Filters;
 2 
 3 namespace Project6.Utility.Filters
 4 {
 5     public class CustomActionFilterAttribute : Attribute, IActionFilter
 6     {
 7         private readonly ILogger<CustomActionFilterAttribute> _ILogger;
 8 
 9         public CustomActionFilterAttribute(ILogger<CustomActionFilterAttribute> iLogger)
10         {
11             this._ILogger = iLogger;
12         }
13 
14         /// <summary>
15         /// 在Action之后执行
16         /// </summary>
17         /// <param name="context"></param>
18         public void OnActionExecuted(ActionExecutedContext context)
19         {
20            var result = Newtonsoft.Json.JsonConvert.SerializeObject(context.Result);
21             var controllerName = context.HttpContext.GetRouteValue("controller");
22             var actionName = context.HttpContext.GetRouteValue("action");
23             _ILogger.LogInformation($"执行{controllerName} - {actionName},结果为:{result}");
24         }
25 
26         /// <summary>
27         /// 在Action之前执行
28         /// </summary>
29         /// <param name="context"></param>
30         public void OnActionExecuting(ActionExecutingContext context)
31         {
32             var para = context.HttpContext.Request.QueryString.Value;
33             var controllerName = context.HttpContext.GetRouteValue("controller");
34             var actionName = context.HttpContext.GetRouteValue("action");
35             _ILogger.LogInformation($"执行{controllerName} - {actionName},参数为:{para}");
36         }
37     }
38 }
View Code

3、添加控制器CustomActionFilterController

 1 using Microsoft.AspNetCore.Mvc;
 2 using Project6.Utility.Filters;
 3 
 4 namespace Project6.Controllers
 5 {
 6     public class CustomActionFilterController : Controller
 7     {
 8         [TypeFilter(typeof(CustomActionFilterAttribute))]
 9         //[ServiceFilter(typeof(CustomActionFilterAttribute))]
10         public IActionResult Index(int id)
11         {
12             ViewBag.user = Newtonsoft.Json.JsonConvert.SerializeObject(new
13             {
14                 Id = id,
15                 Name = "ViewBag"
16             });
17             ViewData["UserInfo"] = Newtonsoft.Json.JsonConvert.SerializeObject(new
18             {
19                 Id = id+1,
20                 Name = "ViewData"
21             });
22 
23             object description = "描述信息";
24             return View(description);
25         }
26     }
27 }
View Code

4、在各个方法处设置断点,运行程序CustomActionFilter?id=1

可以发现程序先执行CustomActionFilterAttribute构造函数-->

控制器构造函数-->

OnActionExecuting方法-->

控制器里面的Index方法-->

OnActionExecuted方法

 

所以OnActionExecuting和OnActionExecuted分别是在控制器方法执行前后执行的。可以用于请求前后的日志记录。

 

标签:CustomActionFilterAttribute,IActionFilter,ILogger,记录,HttpContext,context,var,日志,
来源: https://www.cnblogs.com/handsomeziff/p/16219412.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有