diff --git a/Blog.Core.Common/Helper/FileHelper.cs b/Blog.Core.Common/Helper/FileHelper.cs index f2d717a..c07c86e 100644 --- a/Blog.Core.Common/Helper/FileHelper.cs +++ b/Blog.Core.Common/Helper/FileHelper.cs @@ -83,6 +83,24 @@ namespace Blog.Core.Common.Helper return Path.Combine(folderPath, $@"{prefix}_{DateTime.Now.DateToTimeStamp()}.log"); } + public static string GetAvailableFileNameWithPrefixOrderSize(string _contentRoot, string prefix, int size = 1 * 1024 * 1024, string ext = ".log") + { + var folderPath = Path.Combine(_contentRoot, "Log"); + if (!Directory.Exists(folderPath)) + { + Directory.CreateDirectory(folderPath); + } + + var allFiles = new DirectoryInfo(folderPath); + var selectFiles = allFiles.GetFiles().Where(fi => fi.Name.ToLower().Contains(prefix.ToLower()) && fi.Extension.ToLower() == ext.ToLower() && fi.Length < size).OrderByDescending(d => d.Name).ToList(); + + if (selectFiles.Count > 0) + { + return selectFiles.FirstOrDefault().Name.Replace(".log",""); + } + + return $@"{prefix}_{DateTime.Now.DateToTimeStamp()}"; + } #endregion #region 写文件 diff --git a/Blog.Core.Extensions/Middlewares/IPLogMildd.cs b/Blog.Core.Extensions/Middlewares/IPLogMildd.cs index b8dadba..aa5c426 100644 --- a/Blog.Core.Extensions/Middlewares/IPLogMildd.cs +++ b/Blog.Core.Extensions/Middlewares/IPLogMildd.cs @@ -1,5 +1,7 @@ using Blog.Core.Common; +using Blog.Core.Common.Helper; using Blog.Core.Common.LogHelper; +using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Newtonsoft.Json; using System; @@ -17,13 +19,16 @@ namespace Blog.Core.Middlewares /// /// private readonly RequestDelegate _next; + private readonly IWebHostEnvironment _environment; + /// /// /// /// - public IPLogMildd(RequestDelegate next) + public IPLogMildd(RequestDelegate next, IWebHostEnvironment environment) { _next = next; + _environment = environment; } public async Task InvokeAsync(HttpContext context) @@ -53,11 +58,12 @@ namespace Blog.Core.Middlewares // 自定义log输出 //Parallel.For(0, 1, e => //{ - // LogLock.OutSql2Log("RequestIpInfoLog", new string[] { requestInfo + "," }, false); + LogLock.OutSql2Log("RequestIpInfoLog", new string[] { requestInfo + "," }, false); //}); // 这种方案也行,用的是Serilog - SerilogServer.WriteLog("RequestIpInfoLog", new string[] { requestInfo + "," }, false); + var logFileName = FileHelper.GetAvailableFileNameWithPrefixOrderSize(_environment.ContentRootPath, "RequestIpInfoLog"); + SerilogServer.WriteLog(logFileName, new string[] { requestInfo + "," }, false); request.Body.Position = 0; } diff --git a/Blog.Core.Extensions/Middlewares/RecordAccessLogsMildd.cs b/Blog.Core.Extensions/Middlewares/RecordAccessLogsMildd.cs index 7180b1a..4174a45 100644 --- a/Blog.Core.Extensions/Middlewares/RecordAccessLogsMildd.cs +++ b/Blog.Core.Extensions/Middlewares/RecordAccessLogsMildd.cs @@ -1,6 +1,8 @@ using Blog.Core.Common; +using Blog.Core.Common.Helper; using Blog.Core.Common.HttpContextUser; using Blog.Core.Common.LogHelper; +using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; using Newtonsoft.Json; @@ -25,17 +27,19 @@ namespace Blog.Core.Middlewares private readonly RequestDelegate _next; private readonly IUser _user; private readonly ILogger _logger; + private readonly IWebHostEnvironment _environment; private Stopwatch _stopwatch; /// /// /// /// - public RecordAccessLogsMildd(RequestDelegate next, IUser user, ILogger logger) + public RecordAccessLogsMildd(RequestDelegate next, IUser user, ILogger logger, IWebHostEnvironment environment) { _next = next; _user = user; _logger = logger; + _environment = environment; _stopwatch = new Stopwatch(); } @@ -107,7 +111,9 @@ namespace Blog.Core.Middlewares // LogLock.OutSql2Log("RecordAccessLogs", new string[] { requestInfo + "," }, false); //}); - SerilogServer.WriteLog("RecordAccessLogs", new string[] { requestInfo + "," }, false); + var logFileName = FileHelper.GetAvailableFileNameWithPrefixOrderSize(_environment.ContentRootPath, "RecordAccessLogs"); + SerilogServer.WriteLog(logFileName, new string[] { requestInfo + "," }, false); + return Task.CompletedTask; });