啊鑫
2024-10-23 bebc2708dc1fdf4e654c514b810a98c043ce2023
MESApplication/Filter/ActionFilter.cs
@@ -1,71 +1,32 @@
using Microsoft.AspNetCore.Mvc;
using System.Diagnostics;
using System.Text;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Controllers;
using Microsoft.AspNetCore.Mvc.Filters;
using Newtonsoft.Json;
using System.Diagnostics;
using System.Text;
namespace MESApplication;
/// <summary>
/// 方法过滤器
///     方法过滤器
/// </summary>
public class ActionFilter : IActionFilter
{
    private Stopwatch _stopwatch;
    /// <summary>
    /// 监控日志
    ///     监控日志
    /// </summary>
    public static ILogger LoggerMonitor { get; set; }
    /// <summary>
    /// 错误日志
    ///     错误日志
    /// </summary>
    public static ILogger LoggerError { get; set; }
    private Stopwatch _stopwatch;
    /// <summary>
    /// 创建请求日志文本
    /// </summary>
    /// <param name="method"></param>
    /// <param name="controllerName"></param>
    /// <param name="actionName"></param>
    /// <param name="actionArgs"></param>
    /// <returns></returns>
    private static string CreateRequestLogText(string method, string controllerName, string actionName,
        string requestHead, string requestBody)
    {
        var sb = new StringBuilder();
        sb.Append(
            $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff")} 请求{method}/{controllerName}/{actionName}接口,请求Head:{requestHead}\n");
        sb.Append(
            $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff")} 请求{method}/{controllerName}/{actionName}接口,请求Body:{requestBody}\n");
        return sb.ToString();
    }
    /// <summary>
    /// 创建响应日志文本
    /// </summary>
    /// <param name="method"></param>
    /// <param name="controllerName"></param>
    /// <param name="actionName"></param>
    /// <param name="result"></param>
    /// <returns></returns>
    private static string CreateResponseLogText(string method, string controllerName, string actionName, object result)
    {
        var sb = new StringBuilder();
        sb.Append(
            $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff")} 完成请求{method}/{controllerName}/{actionName}接口,返回结果:");
        if (result != null)
            sb.Append($"{JsonConvert.SerializeObject(result)}");
        else
            sb.Append($"无");
        return sb.ToString();
    }
    /// <summary>
    /// 方法执行前
    ///     方法执行前
    /// </summary>
    /// <param name="context"></param>
    /// <exception cref="NotImplementedException"></exception>
@@ -85,7 +46,8 @@
                var requestHeaders = context.HttpContext.Request.Headers;
                // 访问请求中的 header 信息
                foreach (var header in requestHeaders) headers.Add(header.Key, header.Value);
                foreach (var header in requestHeaders)
                    headers.Add(header.Key, header.Value);
                var requestHead = JsonConvert.SerializeObject(headers);
                Dictionary<string, object> bodys = new();
@@ -95,13 +57,17 @@
                {
                    //dic.Add(argument.Key, argument.Value);
                    var parameter =
                        JsonConvert.DeserializeObject<Dictionary<string, object>>(argument.Value.ToString());
                    foreach (var item in parameter) bodys.Add(item.Key, item.Value);
                        JsonConvert
                            .DeserializeObject<Dictionary<string, object>>(
                                argument.Value.ToString());
                    foreach (var item in parameter)
                        bodys.Add(item.Key, item.Value);
                }
                var requestBody = JsonConvert.SerializeObject(bodys);
                var logText = CreateRequestLogText(context.HttpContext.Request.Method, desc.ControllerName,
                var logText = CreateRequestLogText(
                    context.HttpContext.Request.Method, desc.ControllerName,
                    desc.ActionName, requestHead, requestBody);
                //LoggerMonitor.LogDebug(logText);
                //ErrorLog.Write(logText);
@@ -122,7 +88,8 @@
            // 记录异常日志
            if (LoggerError != null)
            {
                LoggerError.LogError(context.Exception, context.Exception.Message);
                LoggerError.LogError(context.Exception,
                    context.Exception.Message);
                ErrorLog.Write(
                    $@"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff")} 接口异常:{JsonConvert.SerializeObject(context.Exception)}");
@@ -152,4 +119,45 @@
        //  ErrorLog.Write(msg);
        //  ErrorLog.Write("==================================================================================================================================");
    }
    /// <summary>
    ///     创建请求日志文本
    /// </summary>
    /// <param name="method"></param>
    /// <param name="controllerName"></param>
    /// <param name="actionName"></param>
    /// <param name="actionArgs"></param>
    /// <returns></returns>
    private static string CreateRequestLogText(string method,
        string controllerName, string actionName,
        string requestHead, string requestBody)
    {
        var sb = new StringBuilder();
        sb.Append(
            $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff")} 请求{method}/{controllerName}/{actionName}接口,请求Head:{requestHead}\n");
        sb.Append(
            $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff")} 请求{method}/{controllerName}/{actionName}接口,请求Body:{requestBody}\n");
        return sb.ToString();
    }
    /// <summary>
    ///     创建响应日志文本
    /// </summary>
    /// <param name="method"></param>
    /// <param name="controllerName"></param>
    /// <param name="actionName"></param>
    /// <param name="result"></param>
    /// <returns></returns>
    private static string CreateResponseLogText(string method,
        string controllerName, string actionName, object result)
    {
        var sb = new StringBuilder();
        sb.Append(
            $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff")} 完成请求{method}/{controllerName}/{actionName}接口,返回结果:");
        if (result != null)
            sb.Append($"{JsonConvert.SerializeObject(result)}");
        else
            sb.Append("无");
        return sb.ToString();
    }
}