dengjunjie
2025-02-11 8467804705615f7614c29e7ef7ac3e99f5c13a54
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_Core/LogHelper/Logger.cs
@@ -1,13 +1,21 @@
using Microsoft.AspNetCore.Http;
using Microsoft.OpenApi.Models;
using SqlSugar;
using StackExchange.Profiling.Internal;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.Serialization.Formatters;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
using WIDESEA_Core.DB;
using WIDESEA_Core.Enums;
using WIDESEA_Core.Helper;
using WIDESEA_Core.HttpContextUser;
using WIDESEA_Core.Seed;
@@ -87,7 +95,7 @@
                row["RequestParam"] = log.RequestParam?.Replace("\r\n", "").Replace("\n", "");
                // å°†ResponseParam中的换行符替换为空字符串
                row["ResponseParam"] = log.ResponseParam?.Replace("\r\n", "").Replace("\n", "");
                //row["Success"] = log.Success ?? -1;
                row["Success"] = log.Success ?? -1;
                // å°†BeginDate设置为log的BeginDate
                row["BeginDate"] = log.BeginDate;
                // å°†EndDate设置为log的EndDate
@@ -102,6 +110,8 @@
                row["UserId"] = log.UserId ?? -1;
                // å°†UserName设置为log的UserName
                row["UserName"] = log.UserName;
                row["MethodName"] = log.MethodName;
                row["Methodremark"] = log.Methodremark;
                // å°†row添加到queueTable中
                queueTable.Rows.Add(row);
            }
@@ -115,13 +125,13 @@
            queueTable.Columns.Add("EndDate", Type.GetType("System.DateTime"));
            queueTable.Columns.Add("RequestParam", typeof(string));
            queueTable.Columns.Add("ResponseParam", typeof(string));
            //queueTable.Columns.Add("Success", Type.GetType("System.Int32"));
            queueTable.Columns.Add("Success", Type.GetType("System.Int32"));
            queueTable.Columns.Add("Url", typeof(string));
            queueTable.Columns.Add("UserIP", typeof(string));
            queueTable.Columns.Add("UserName", typeof(string));
            queueTable.Columns.Add("UserId", Type.GetType("System.Int32"));
            //queueTable.Columns.Add("LogType", typeof(string));
            //queueTable.Columns.Add("ExceptionInfo", typeof(string));
            queueTable.Columns.Add("MethodName", typeof(string));
            queueTable.Columns.Add("Methodremark", typeof(string));
            //queueTable.Columns.Add("ServiceIP", typeof(string));
            //queueTable.Columns.Add("BrowserType", typeof(string));
            //queueTable.Columns.Add("Role_Id", Type.GetType("System.Int32"));
@@ -131,6 +141,8 @@
        public static void Add(string requestParameter, string responseParameter)
        {
            dynamic log = null;
            string MethodName = string.Empty;
            string Methodremark = string.Empty;
            try
            {
                //获取当前HttpContext
@@ -140,11 +152,46 @@
                {
                    return;
                }
                //如果请求方法为OPTIONS,则返回
                if (context.Request.Method == "OPTIONS") return;
                //获取RequestLogModel实例
                RequestLogModel logModel = (context.RequestServices.GetService(typeof(RequestLogModel)) as RequestLogModel) ?? new RequestLogModel { RequestDate = DateTime.Now };
                #region èŽ·å–æŽ¥å£æ³¨é‡Š
                try
                {
                    string path = context.Request.Path;
                    var names = path.Split('/');
                    var basePath = AppContext.BaseDirectory + "WIDESEA_WMSServer";
                    Assembly assembly = Assembly.LoadFrom(basePath);
                    List<Type> types = assembly.GetTypes().Where(x => x.Name.Contains(names[2] + "Controller")).ToList();
                    if (types.Count > 0)
                    {
                        //MethodInfo methodInfo = types.First().GetMethod("login");
                        MethodInfo methodInfo = types.First().GetMethods()
                                .FirstOrDefault(m => m.Name.Equals(names[3], StringComparison.OrdinalIgnoreCase));
                        if (methodInfo != null)
                        {
                            MethodName = methodInfo.Name;
                            string xmlPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, methodInfo.DeclaringType.Assembly.GetName().Name + ".xml");
                            //if (!File.Exists(xmlPath)) return "XML documentation file not found."; // æ£€æŸ¥æ–‡ä»¶æ˜¯å¦å­˜åœ¨
                            // åŠ è½½XML文档并解析摘要信息
                            XDocument xdoc = XDocument.Load(xmlPath);
                            string membername = $"M:{methodInfo.DeclaringType.FullName}.{methodInfo.Name}";
                            var member = xdoc.Descendants("member")
                                                .FirstOrDefault(m => m.Attribute("name").Value.ToString().Contains(membername));// å®šä½åˆ°æ–¹æ³•节点
                            //.FirstOrDefault(m => m.Attribute("name")?.Value == $"M:{methodInfo.DeclaringType.FullName}.{methodInfo.Name}"); // å®šä½åˆ°æ–¹æ³•节点
                            //if (member == null) return "Member not found in XML documentation."; // æ£€æŸ¥æ–¹æ³•是否在XML文档中找到
                            //var summary = member?.Element("summary")?.Value ?? "No summary provided."; // èŽ·å–æ‘˜è¦ä¿¡æ¯æˆ–é»˜è®¤å€¼
                            Methodremark = member?.Element("summary")?.Value.Replace("\n", "").Replace(" ", "") ?? methodInfo.Name; // èŽ·å–æ‘˜è¦ä¿¡æ¯æˆ–é»˜è®¤å€¼
                        }
                    }
                }
                catch (Exception ex)
                {
                }
                #endregion
                //获取当前用户
                IUser user = App.User;
                //创建日志对象
@@ -158,6 +205,12 @@
                    RequestParam = requestParameter,
                    //响应参数
                    ResponseParam = responseParameter,
                    //方法名称
                    MethodName = MethodName,
                    //方法描述
                    Methodremark= Methodremark,
                    //响应状态
                    Success = LogStatusEnum.Success.ObjToInt(),
                    //请求URL
                    Url = context.Request.Scheme + "://" + context.Request.Host + context.Request.PathBase + context.Request.Path,
                    //客户端IP
@@ -181,6 +234,12 @@
                    RequestParam = requestParameter,
                    //响应参数
                    ResponseParam = responseParameter,
                    //方法名称
                    MethodName = MethodName,
                    //方法描述
                    Methodremark = Methodremark,
                    //响应状态
                    Success = LogStatusEnum.Error.ObjToInt(),
                };
            }
            //添加系统日志