C# 添加日志文件


 1 /// <summary>
 2     /// 记录日志
 3     /// </summary>
 4     public class LogAttribute: ActionFilterAttribute
 5     {
 6         private string LogFlag { get; set; }
 7 
 8         private string ActionArguments { get; set; }
 9 
10 
11         private string RequestBody { get; set; }
12 
13         private Stopwatch Stopwatch { get; set; }
14 
15         public LogAttribute(string logFlag)
16         {
17             LogFlag = logFlag;
18         }
19 
20         public override void OnActionExecuting(ActionExecutingContext context)
21         {
22             base.OnActionExecuting(context);
23 
24             // 后续添加了获取请求的请求体,如果在实际项目中不需要删除即可
25             long contentLen = context.HttpContext.Request.ContentLength == null ? 0 : context.HttpContext.Request.ContentLength.Value;
26             if (contentLen > 0)
27             {
28                 // 读取请求体中所有内容
29                 System.IO.Stream stream = context.HttpContext.Request.Body;
30                 if (context.HttpContext.Request.Method == "POST")
31                 {
32                     stream.Position = 0;
33                 }
34                 byte[] buffer = new byte[contentLen];
35                 stream.Read(buffer, 0, buffer.Length);
36                 // 转化为字符串
37                 RequestBody = System.Text.Encoding.UTF8.GetString(buffer);
38             }
39 
40             ActionArguments = Newtonsoft.Json.JsonConvert.SerializeObject(context.ActionArguments);
41 
42             Stopwatch = new Stopwatch();
43             Stopwatch.Start();
44         }
45 
46         public override void OnActionExecuted(ActionExecutedContext context)
47         {
48             base.OnActionExecuted(context);
49             Stopwatch.Stop();
50 
51             string url = context.HttpContext.Request.Host + context.HttpContext.Request.Path + context.HttpContext.Request.QueryString;
52             string method = context.HttpContext.Request.Method;
53 
54             string qs = ActionArguments;
55 
56             dynamic result = context.Result.GetType().Name == "EmptyResult" ? new { Value = "无返回结果" } : context.Result as dynamic;
57 
58             string res = "在返回结果前发生了异常";
59             try
60             {
61                 if (result != null)
62                 {
63                     res = Newtonsoft.Json.JsonConvert.SerializeObject(result.Value);
64                 }
65             }
66             catch (System.Exception)
67             {
68                 res = "日志未获取到结果,返回的数据无法序列化";
69             }
70 
71 
72             Log.Information($"\n 方法:{LogFlag} \n " +
73                 $"地址:{url} \n " +
74                 $"方式:{method} \n " +
75                 $"请求体:{RequestBody} \n " +
76                 $"参数:{qs}\n " +
77                 $"结果:{res}\n " +
78                 $"耗时:{Stopwatch.Elapsed.TotalMilliseconds} 毫秒(指控制器内对应方法执行完毕的时间)");
79 
80         }
81 
82     }
83 
84 //引用
85         [HttpGet, Core.Log("测试get")]
86 
87         public ResponseResult<PageRespResult> List([FromQuery] QueryStorageCabinetListReq request)
88         {
89             return _app.GetList(request);
90         }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM