From 515866f63c9fbdb83de3f2016e4eaf2af99490d7 Mon Sep 17 00:00:00 2001 From: hutongqing <hutongqing@hnkhzn.com> Date: 星期三, 15 一月 2025 11:32:52 +0800 Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/MeiRuiAn/HuaiAn --- 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/LogHelper/Logger.cs | 325 +++++++++++++++++++++++++++++++++++------------------ 1 files changed, 212 insertions(+), 113 deletions(-) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/LogHelper/Logger.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/LogHelper/Logger.cs" index a8e99dd..d833379 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/LogHelper/Logger.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/LogHelper/Logger.cs" @@ -1,10 +1,9 @@ -锘� -using Microsoft.AspNetCore.Http; -using Microsoft.Extensions.Logging; -using Newtonsoft.Json; +锘縰sing Microsoft.AspNetCore.Http; using SqlSugar; using System; +using System.Collections.Concurrent; using System.Collections.Generic; +using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -15,138 +14,238 @@ namespace WIDESEA_Core.LogHelper { - public class Logger + public static class Logger { - /// <summary> - /// 鍐欏叆璋冭瘯鏃ュ織 - /// </summary> - /// <param name="fileName"></param> - /// <param name="msg"></param> - public void WriteDebug(string fileName, string msg) + public static ConcurrentQueue<dynamic> loggerQueueData = new ConcurrentQueue<dynamic>(); + static Logger() { - if (AppSettings.Get(new string[] { "LogDeubgEnable" }).ObjToBool()) + Task.Run(() => { - StringBuilder builder = new StringBuilder(msg); - builder.Append(Environment.NewLine); - builder.Append(Environment.NewLine); - WriteLogToFile($"Debug_{fileName}", builder.ToString()); + StartWriteLog(); + }); + + } + + static void StartWriteLog() + { + DataTable queueTable = CreateEmptyTable(); + while (true) + { + try + { + //濡傛灉闃熷垪涓湁鏁版嵁涓旈槦鍒楄〃涓殑琛屾暟灏忎簬500锛屽垯灏嗛槦鍒椾腑鐨勬暟鎹啓鍏ラ槦鍒楄〃 + if (loggerQueueData.Count() > 0 && queueTable.Rows.Count < 500) + { + DequeueToTable(queueTable); continue; + } + //姣�5绉掑啓涓�娆℃暟鎹� + Thread.Sleep(5000); + + //濡傛灉闃熷垪琛ㄤ腑鐨勮鏁颁负0锛屽垯璺宠繃鏈寰幆 + if (queueTable.Rows.Count == 0) { continue; } + + //鍒涘缓SqlSugarClient瀵硅薄锛岀敤浜庤繛鎺ユ暟鎹簱 + SqlSugarClient sugarClient = new SqlSugarClient(new ConnectionConfig() + { + ConnectionString = DBContext.GetMainConnectionDb().Connection, + IsAutoCloseConnection = true, + DbType = MainDb.DbType, + }); + + //灏嗛槦鍒楄〃涓殑鏁版嵁鎵归噺鎻掑叆鏁版嵁搴� + int rows = sugarClient.Fastest<DataTable>().AS("Sys_Log").BulkCopy(queueTable); + + //娓呯┖闃熷垪琛� + queueTable.Clear(); + } + catch (Exception ex) + { + //鎵撳嵃寮傚父淇℃伅 + Console.WriteLine(ex.ToString()); + } } } - /// <summary> - /// 鍐欏叆淇℃伅鏃ュ織 - /// </summary> - /// <param name="fileName"></param> - /// <param name="msg"></param> - public void WriteInfo(string fileName, string msg) + private static void DequeueToTable(DataTable queueTable) { - StringBuilder builder = new StringBuilder(msg); - builder.Append(Environment.NewLine); - builder.Append(Environment.NewLine); - WriteLogToFile($"Info_{fileName}", builder.ToString()); + loggerQueueData.TryDequeue(out dynamic log); + if (log != null) + { + DataRow row = queueTable.NewRow(); + // 濡傛灉log鐨凚eginDate涓虹┖鎴栬�匓eginDate鐨勫勾浠藉皬浜�2010锛屽垯灏咮eginDate璁剧疆涓哄綋鍓嶆椂闂� + if (log.BeginDate == null || log.BeginDate?.Year < 2010) + { + log.BeginDate = DateTime.Now; + } + // 濡傛灉log鐨凟ndDate涓虹┖锛屽垯灏咵ndDate璁剧疆涓哄綋鍓嶆椂闂� + if (log.EndDate == null) + { + log.EndDate = DateTime.Now; + } + // row["Id"] = log.Id; + // 灏哛equestParam涓殑鎹㈣绗︽浛鎹负绌哄瓧绗︿覆 + row["RequestParam"] = log.RequestParam?.Replace("\r\n", "").Replace("\n", ""); + // 灏哛esponseParam涓殑鎹㈣绗︽浛鎹负绌哄瓧绗︿覆 + row["ResponseParam"] = log.ResponseParam?.Replace("\r\n", "").Replace("\n", ""); + //row["Success"] = log.Success ?? -1; + // 灏咮eginDate璁剧疆涓簂og鐨凚eginDate + row["BeginDate"] = log.BeginDate; + // 灏咵ndDate璁剧疆涓簂og鐨凟ndDate + row["EndDate"] = log.EndDate; + // 璁$畻ElapsedTime锛屽嵆EndDate鍑忓幓BeginDate鐨勬绉掓暟 + row["ElapsedTime"] = ((DateTime)log.EndDate - (DateTime)log.BeginDate).TotalMilliseconds; + // 灏哢serIP璁剧疆涓簂og鐨刄serIP + row["UserIP"] = log.UserIP; + // 灏哢rl璁剧疆涓簂og鐨刄rl + row["Url"] = log.Url; + // 濡傛灉log鐨刄serId涓虹┖锛屽垯灏哢serId璁剧疆涓�-1锛屽惁鍒欒缃负log鐨刄serId + row["UserId"] = log.UserId ?? -1; + // 灏哢serName璁剧疆涓簂og鐨刄serName + row["UserName"] = log.UserName; + // 灏唕ow娣诲姞鍒皅ueueTable涓� + queueTable.Rows.Add(row); + } } - /// <summary> - /// 鍐欏叆閿欒鏃ュ織 - /// </summary> - /// <param name="fileName"></param> - /// <param name="msg"></param> - /// <param name="ex"></param> - public void WriteError(string fileName, string msg, Exception ex) + private static DataTable CreateEmptyTable() { - StringBuilder builder = new StringBuilder(msg); - builder.Append(Environment.NewLine); - builder.Append("閿欒淇℃伅锛�"); - builder.Append(ex.Message); - builder.Append(Environment.NewLine); - builder.Append("閿欒婧愶細"); - builder.Append(ex.Source); - builder.Append(Environment.NewLine); - builder.Append("閿欒鍫嗘爤锛�"); - builder.Append(ex.StackTrace); - builder.Append(Environment.NewLine); - builder.Append("閿欒绫诲瀷锛�"); - builder.Append(ex.GetType().ToString()); - builder.Append(Environment.NewLine); - builder.Append("閿欒鏂规硶锛�"); - builder.Append(ex.TargetSite?.ToString()); - builder.Append(Environment.NewLine); - builder.Append(Environment.NewLine); - WriteLogToFile($"Error_{fileName}", builder.ToString()); + DataTable queueTable = new DataTable(); + queueTable.Columns.Add("BeginDate", Type.GetType("System.DateTime")); + queueTable.Columns.Add("ElapsedTime", Type.GetType("System.Int32")); + 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("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("ServiceIP", typeof(string)); + //queueTable.Columns.Add("BrowserType", typeof(string)); + //queueTable.Columns.Add("Role_Id", Type.GetType("System.Int32")); + return queueTable; } - - ReaderWriterLockSlim LogWriteLock = new ReaderWriterLockSlim(); - string folderPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Log\\{DateTime.Now.ToString("yyyy-MM-dd")}"); - - private void WriteLogToFile(string fileName, string log) + public static void Add(string requestParameter, string responseParameter) { + dynamic log = null; try { - // 杩涘叆鍐欓攣 - LogWriteLock.EnterWriteLock(); - - // 濡傛灉鏂囦欢澶逛笉瀛樺湪锛屽垯鍒涘缓鏂囦欢澶� - if (!Directory.Exists(folderPath)) + //鑾峰彇褰撳墠HttpContext + HttpContext context = App.HttpContext; + //濡傛灉HttpContext涓虹┖锛屽垯杩斿洖 + if (context == null) { - Directory.CreateDirectory(folderPath); + return; } - // 鑾峰彇鏃ュ織鏂囦欢璺緞 - string logFilePath = Path.Combine(folderPath, GetLastAccessFileName(fileName)); - // 鑾峰彇褰撳墠鏃堕棿 - DateTime now = DateTime.Now; - // 鏋勯�犳棩蹇楀唴瀹� - string logContent = $"銆恵now}銆憑Environment.NewLine}{log}"; + //濡傛灉璇锋眰鏂规硶涓篛PTIONS锛屽垯杩斿洖 + if (context.Request.Method == "OPTIONS") return; + //鑾峰彇RequestLogModel瀹炰緥 + RequestLogModel logModel = (context.RequestServices.GetService(typeof(RequestLogModel)) as RequestLogModel) ?? new RequestLogModel { RequestDate = DateTime.Now }; - // 灏嗘棩蹇楀唴瀹硅拷鍔犲埌鏃ュ織鏂囦欢涓� - File.AppendAllText(logFilePath, logContent); - } - catch { } - finally - { - // 閫�鍑哄啓閿� - LogWriteLock.ExitWriteLock(); - } - } - int size = 10 * 1024 * 1024; - string ext = ".log"; - private string GetLogFilePath(string folderPath, string fileName) - { - // 鑾峰彇鎸囧畾鏂囦欢澶逛笅鐨勬墍鏈夋枃浠� - var allFiles = new DirectoryInfo(folderPath); - // 鑾峰彇绗﹀悎鏉′欢鐨勬枃浠讹紝鎸夋枃浠跺悕闄嶅簭鎺掑垪 - var selectFiles = allFiles.GetFiles().Where(fi => fi.Name.ToLower().Contains(fileName.ToLower()) && fi.Extension.ToLower() == ext.ToLower() && fi.Length < size).OrderByDescending(d => d.Name).ToList(); - - FileInfo? file = selectFiles.FirstOrDefault(); - // 濡傛灉鏈夌鍚堟潯浠剁殑鏂囦欢锛岃繑鍥炵涓�涓枃浠剁殑瀹屾暣璺緞 - if (file != null) - { - return file.FullName; - } - - // 濡傛灉娌℃湁绗﹀悎鏉′欢鐨勬枃浠讹紝杩斿洖涓�涓柊鐨勬枃浠惰矾寰勶紝鏂囦欢鍚嶄负鍘熸枃浠跺悕鍔犱笂褰撳墠鏃堕棿 - return Path.Combine(folderPath, $@"{fileName}_{DateTime.Now.ToString("HH-mm-ss")}.log"); - } - - private string GetLastAccessFileName(string fileName) - { - foreach (var m in GetExistLogFileNames(fileName)) - { - FileInfo fileInfo = new FileInfo(m); - if (fileInfo.Length < size) + //鑾峰彇褰撳墠鐢ㄦ埛 + IUser user = App.User; + //鍒涘缓鏃ュ織瀵硅薄 + log = new { - return m; - } + //璇锋眰寮�濮嬫椂闂� + BeginDate = logModel.RequestDate, + //璇锋眰缁撴潫鏃堕棿 + EndDate = DateTime.Now, + //璇锋眰鍙傛暟 + RequestParam = requestParameter, + //鍝嶅簲鍙傛暟 + ResponseParam = responseParameter, + //璇锋眰URL + Url = context.Request.Scheme + "://" + context.Request.Host + context.Request.PathBase + context.Request.Path, + //瀹㈡埛绔疘P + UserIP = GetClientIP(context)?.Replace("::ffff:", "").Replace("::1", "127.0.0.1"), + //鐢ㄦ埛ID + UserId = user.UserId, + //鐢ㄦ埛鍚� + UserName = user.UserName + }; } - - // 杩斿洖涓�涓柊鐨勯粯璁ゅ綋鍓嶆椂闂寸殑鏃ュ織鍚嶇О - return $@"{fileName}_{DateTime.Now.ToString("HH-mm-ss")}.log"; + catch (Exception exception) + { + //濡傛灉鍙戠敓寮傚父锛屽垯鍒涘缓鏃ュ織瀵硅薄 + log = log ?? new + { + //璇锋眰寮�濮嬫椂闂� + BeginDate = DateTime.Now, + //璇锋眰缁撴潫鏃堕棿 + EndDate = DateTime.Now, + //璇锋眰鍙傛暟 + RequestParam = requestParameter, + //鍝嶅簲鍙傛暟 + ResponseParam = responseParameter, + }; + } + //娣诲姞绯荤粺鏃ュ織 + loggerQueueData.Enqueue(log); } - private string[] GetExistLogFileNames(string fileName) + public static void Add(string url, string requestParameter, string responseParameter, DateTime beginDate) { - string[] fileNames = Directory.GetFiles(folderPath, fileName + "*.log"); - return fileNames; + dynamic? log = null; + try + { + //鑾峰彇褰撳墠鐢ㄦ埛 + IUser? user = App.User; + //鍒涘缓鏃ュ織瀵硅薄 + log = new + { + //璇锋眰寮�濮嬫椂闂� + BeginDate = beginDate, + //璇锋眰缁撴潫鏃堕棿 + EndDate = DateTime.Now, + //璇锋眰鍙傛暟 + RequestParam = requestParameter, + //鍝嶅簲鍙傛暟 + ResponseParam = responseParameter, + //璇锋眰URL + Url = url, + //瀹㈡埛绔疘P + UserIP = "", + //鐢ㄦ埛ID + UserId = user?.UserId, + //鐢ㄦ埛鍚� + UserName = user?.UserName + }; + } + catch (Exception exception) + { + //濡傛灉鍙戠敓寮傚父锛屽垯鍒涘缓鏃ュ織瀵硅薄 + log = log ?? new + { + //璇锋眰寮�濮嬫椂闂� + BeginDate = DateTime.Now, + //璇锋眰缁撴潫鏃堕棿 + EndDate = DateTime.Now, + //璇锋眰鍙傛暟 + RequestParam = requestParameter, + //鍝嶅簲鍙傛暟 + ResponseParam = responseParameter, + }; + } + //娣诲姞绯荤粺鏃ュ織 + loggerQueueData.Enqueue(log); + } + + public static string GetClientIP(HttpContext context) + { + // 鑾峰彇璇锋眰澶翠腑鐨刋-Forwarded-For瀛楁锛屽苟灏嗗叾杞崲涓哄瓧绗︿覆 + var ip = context.Request.Headers["X-Forwarded-For"].ObjToString(); + // 濡傛灉X-Forwarded-For瀛楁涓虹┖锛屽垯鑾峰彇杩滅▼IP鍦板潃 + if (string.IsNullOrEmpty(ip)) + { + ip = context.Connection.RemoteIpAddress.ObjToString(); + } + + // 杩斿洖IP鍦板潃 + return ip; } } } -- Gitblit v1.9.3