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);