From bdf0e6b08518b2b927d11a90635975ce64725c27 Mon Sep 17 00:00:00 2001 From: haoliang <821644@qq.com> Date: Thu, 7 May 2026 13:28:41 +0800 Subject: [PATCH] =?UTF-8?q?WebAPI=E5=A2=9E=E5=8A=A0log4net=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E6=97=A5=E5=BF=97=EF=BC=9AGlobalExceptionFilter?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E5=BC=82=E5=B8=B8=E5=A0=86=E6=A0=88=E5=88=B0?= =?UTF-8?q?App=5FData\logs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/CncWebApi/CncWebApi.csproj | 1 + .../Filters/GlobalExceptionFilter.cs | 7 +++- src/CncWebApi/Global.asax.cs | 9 +++++ src/CncWebApi/log4net.config | 35 +++++++++++++++++++ 4 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 src/CncWebApi/log4net.config diff --git a/src/CncWebApi/CncWebApi.csproj b/src/CncWebApi/CncWebApi.csproj index af23f40..5c59053 100644 --- a/src/CncWebApi/CncWebApi.csproj +++ b/src/CncWebApi/CncWebApi.csproj @@ -43,6 +43,7 @@ + diff --git a/src/CncWebApi/Filters/GlobalExceptionFilter.cs b/src/CncWebApi/Filters/GlobalExceptionFilter.cs index f596ab1..e0ae035 100644 --- a/src/CncWebApi/Filters/GlobalExceptionFilter.cs +++ b/src/CncWebApi/Filters/GlobalExceptionFilter.cs @@ -4,6 +4,7 @@ using System.Web.Http; using System.Web.Http.Filters; using CncModels.Dto; using CncService; +using log4net; namespace CncWebApi.Filters { @@ -14,6 +15,8 @@ namespace CncWebApi.Filters /// public class GlobalExceptionFilter : ExceptionFilterAttribute { + private static readonly ILog _log = LogManager.GetLogger(typeof(GlobalExceptionFilter)); + /// /// 异常发生时自动调用 /// @@ -23,6 +26,7 @@ namespace CncWebApi.Filters if (context.Exception is BusinessException bex) { // 业务异常:返回对应的错误码和消息 + _log.Warn($"业务异常: [{bex.Code}] {bex.Message}"); var response = ApiResponse.Fail(bex.Code, bex.Message); context.Response = context.Request.CreateResponse( HttpStatusCode.OK, response); @@ -30,7 +34,8 @@ namespace CncWebApi.Filters else { // 未预期异常:返回通用错误提示,不暴露内部细节 - // 详细异常信息由log4net记录到日志文件 + var requestUrl = context.Request?.RequestUri?.ToString(); + _log.Error($"未处理异常: {requestUrl}", context.Exception); var response = ApiResponse.Fail( CncModels.Constants.ErrorCode.InternalError, "服务器内部错误,请稍后重试"); diff --git a/src/CncWebApi/Global.asax.cs b/src/CncWebApi/Global.asax.cs index fcd25de..fe60f5c 100644 --- a/src/CncWebApi/Global.asax.cs +++ b/src/CncWebApi/Global.asax.cs @@ -1,7 +1,9 @@ using System; +using System.IO; using System.Web; using System.Web.Http; using CncWebApi.App_Start; +using log4net; namespace CncWebApi { @@ -16,6 +18,13 @@ namespace CncWebApi /// protected void Application_Start() { + // 初始化 log4net + var logConfig = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "log4net.config"); + if (File.Exists(logConfig)) + { + log4net.Config.XmlConfigurator.Configure(new FileInfo(logConfig)); + } + GlobalConfiguration.Configure(WebApiConfig.Register); } diff --git a/src/CncWebApi/log4net.config b/src/CncWebApi/log4net.config new file mode 100644 index 0000000..085195f --- /dev/null +++ b/src/CncWebApi/log4net.config @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +