其他分享
首页 > 其他分享> > IActionFilter记录日志

IActionFilter记录日志

作者:互联网

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