From b01765360d18b9d5225bcdd2f7653021577c2b08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Thu, 7 Sep 2023 09:30:50 +0800 Subject: [PATCH] =?UTF-8?q?:zap:=E4=BC=98=E5=8C=96Nlog=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=EF=BC=8C=E8=A7=A3=E5=86=B3=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E5=88=B0=E6=96=87=E6=9C=ACIP=E3=80=81=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E5=9C=B0=E5=9D=80=E8=8E=B7=E5=8F=96=E4=B8=8D=E5=88=B0=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CustomException/CustomException.cs | 15 ++++++++-- ZR.Admin.WebApi/NLog.config | 28 +++++++++---------- ZR.Admin.WebApi/Program.cs | 13 ++++++++- .../Middleware/GlobalExceptionMiddleware.cs | 15 ++++++---- ZR.ServiceCore/Services/SysLoginService.cs | 4 +-- ZR.ServiceCore/SqlSugar/SqlsugarSetup.cs | 2 +- 6 files changed, 50 insertions(+), 27 deletions(-) diff --git a/Infrastructure/CustomException/CustomException.cs b/Infrastructure/CustomException/CustomException.cs index 19f8fc5..90f4d57 100644 --- a/Infrastructure/CustomException/CustomException.cs +++ b/Infrastructure/CustomException/CustomException.cs @@ -5,9 +5,19 @@ namespace Infrastructure public class CustomException : Exception { public int Code { get; set; } + /// + /// 前端提示语 + /// public string Msg { get; set; } + /// + /// 记录到日志的详细内容 + /// public string LogMsg { get; set; } - + /// + /// 是否通知 + /// + public bool Notice { get; set; } = true; + public CustomException(string msg) : base(msg) { } @@ -17,9 +27,10 @@ namespace Infrastructure Msg = msg; } - public CustomException(ResultCode resultCode, string msg) : base(msg) + public CustomException(ResultCode resultCode, string msg, bool notice = true) : base(msg) { Code = (int)resultCode; + Notice = notice; } /// diff --git a/ZR.Admin.WebApi/NLog.config b/ZR.Admin.WebApi/NLog.config index ee505cc..02a7cc2 100644 --- a/ZR.Admin.WebApi/NLog.config +++ b/ZR.Admin.WebApi/NLog.config @@ -24,29 +24,29 @@ + layout="${longdate}|${event-properties:item=EventId:whenEmpty=0}|${aspnet-request-connection-id}|${uppercase:${level}}|${logger}|${aspnet-request-iP:CheckForwardedForHeader=true}|${event-properties:item=user:whenEmpty=-}|url: ${aspnet-request-url}|${message:whenEmpty=-}|${event-properties:item=requestParam}|${event-properties:item=jsonResult}"/> + layout="${longdate}|${event-properties:item=EventId:whenEmpty=0}|${uppercase:${level}}|${logger}${newline}用户IP:${aspnet-request-iP:CheckForwardedForHeader=true}|${event-properties:item=user}${newline}请求地址:${aspnet-request-url}${newline}错误消息:${message}${newline}请求参数:${event-properties:item=requestParam}${newline}请求结果:${event-properties:item=jsonResult}${newline}${onexception:${exception:format=tostring}"/> + layout="${date:format=MM-dd HH\:mm\:ss}|${aspnet-request-iP}|${aspnet-request-url}${newline}${message}"> - + + + - - @@ -80,11 +79,10 @@ - - - - + + + diff --git a/ZR.Admin.WebApi/Program.cs b/ZR.Admin.WebApi/Program.cs index 617280b..aee3640 100644 --- a/ZR.Admin.WebApi/Program.cs +++ b/ZR.Admin.WebApi/Program.cs @@ -1,6 +1,8 @@ using AspNetCoreRateLimit; using Infrastructure.Converter; using Microsoft.AspNetCore.DataProtection; +using Microsoft.IdentityModel.Tokens; +using NLog.Web; using System.Text.Json.Serialization; using ZR.Admin.WebApi.Extensions; using ZR.Common.Cache; @@ -9,6 +11,9 @@ using ZR.ServiceCore.Signalr; using ZR.ServiceCore.SqlSugar; var builder = WebApplication.CreateBuilder(args); +// NLog: Setup NLog for Dependency injection +//builder.Logging.ClearProviders(); +builder.Host.UseNLog(); // Add services to the container. builder.Services.AddControllers(); @@ -76,6 +81,13 @@ builder.Services.AddDb(app.Environment); //使用全局异常中间件 app.UseMiddleware(); +//请求头转发 +//ForwardedHeaders中间件会自动把反向代理服务器转发过来的X-Forwarded-For(客户端真实IP)以及X-Forwarded-Proto(客户端请求的协议)自动填充到HttpContext.Connection.RemoteIPAddress和HttpContext.Request.Scheme中,这样应用代码中读取到的就是真实的IP和真实的协议了,不需要应用做特殊处理。 +app.UseForwardedHeaders(new ForwardedHeadersOptions +{ + ForwardedHeaders = Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedFor | Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedProto +}); + app.Use((context, next) => { //设置可以多次获取body内容 @@ -116,5 +128,4 @@ app.MapControllerRoute( pattern: "{controller=Home}/{action=Index}/{id?}"); app.MapControllers(); - app.Run(); \ No newline at end of file diff --git a/ZR.ServiceCore/Middleware/GlobalExceptionMiddleware.cs b/ZR.ServiceCore/Middleware/GlobalExceptionMiddleware.cs index d28b1e1..d32804d 100644 --- a/ZR.ServiceCore/Middleware/GlobalExceptionMiddleware.cs +++ b/ZR.ServiceCore/Middleware/GlobalExceptionMiddleware.cs @@ -44,16 +44,18 @@ namespace ZR.ServiceCore.Middleware private async Task HandleExceptionAsync(HttpContext context, Exception ex) { - NLog.LogLevel logLevel = NLog.LogLevel.Info; + LogLevel logLevel = LogLevel.Info; int code = (int)ResultCode.GLOBAL_ERROR; string msg; string error = string.Empty; + bool notice = true; //自定义异常 if (ex is CustomException customException) { code = customException.Code; msg = customException.Message; error = customException.LogMsg; + notice = customException.Notice; } else if (ex is ArgumentException)//参数异常 { @@ -64,7 +66,7 @@ namespace ZR.ServiceCore.Middleware { msg = "服务器好像出了点问题,请联系系统管理员..."; error = $"{ex.Message}"; - logLevel = NLog.LogLevel.Error; + logLevel = LogLevel.Error; context.Response.StatusCode = 500; } var options = new textJson.JsonSerializerOptions @@ -117,15 +119,16 @@ namespace ZR.ServiceCore.Middleware Logger.Log(ei); context.Response.ContentType = "text/json;charset=utf-8"; await context.Response.WriteAsync(responseResult, System.Text.Encoding.UTF8); - + string errorMsg = $"> 操作人:{sysOperLog.OperName}" + $"\n> 操作地区:{sysOperLog.OperIp}({sysOperLog.OperLocation})" + $"\n> 操作模块:{sysOperLog.Title}" + $"\n> 操作地址:{sysOperLog.OperUrl}" + $"\n> 错误信息:{msg}\n\n> {error}"; - - SysOperLogService.InsertOperlog(sysOperLog); - WxNoticeHelper.SendMsg("系统出错", errorMsg, "", WxNoticeHelper.MsgType.markdown); + + SysOperLogService.InsertOperlog(sysOperLog); + if (!notice) return; + WxNoticeHelper.SendMsg("系统异常", errorMsg, msgType: WxNoticeHelper.MsgType.markdown); } public static Endpoint GetEndpoint(HttpContext context) diff --git a/ZR.ServiceCore/Services/SysLoginService.cs b/ZR.ServiceCore/Services/SysLoginService.cs index f91b96a..2a3dbd7 100644 --- a/ZR.ServiceCore/Services/SysLoginService.cs +++ b/ZR.ServiceCore/Services/SysLoginService.cs @@ -52,13 +52,13 @@ namespace ZR.Service.System { logininfor.Msg = "用户名或密码错误"; AddLoginInfo(logininfor); - throw new CustomException(ResultCode.LOGIN_ERROR, logininfor.Msg); + throw new CustomException(ResultCode.LOGIN_ERROR, logininfor.Msg, false); } if (user.Status == 1) { logininfor.Msg = "该用户已禁用"; AddLoginInfo(logininfor); - throw new CustomException(ResultCode.LOGIN_ERROR, logininfor.Msg); + throw new CustomException(ResultCode.LOGIN_ERROR, logininfor.Msg, false); } logininfor.Status = "0"; diff --git a/ZR.ServiceCore/SqlSugar/SqlsugarSetup.cs b/ZR.ServiceCore/SqlSugar/SqlsugarSetup.cs index b1e0361..d7be7ce 100644 --- a/ZR.ServiceCore/SqlSugar/SqlsugarSetup.cs +++ b/ZR.ServiceCore/SqlSugar/SqlsugarSetup.cs @@ -72,7 +72,7 @@ namespace ZR.ServiceCore.SqlSugar { if (showDbLog) { - string log = $"【db{configId} SQL语句】{UtilMethods.GetSqlString(config.DbType, sql, pars)}\n"; + string log = $"【db{configId} SQL】{UtilMethods.GetSqlString(config.DbType, sql, pars)}\n"; if (sql.TrimStart().StartsWith("SELECT", StringComparison.OrdinalIgnoreCase)) { logger.Info(log);