gpt4 book ai didi

c# - 添加自定义 ExceptionFilter 后,Serilog 会立即停止记录异常

转载 作者:太空宇宙 更新时间:2023-11-03 14:38:43 25 4
gpt4 key购买 nike

我已将 Serilog 添加到我的项目中:

程序.cs

.UseSerilog((provider, context, loggerConfiguration) =>
{
loggerConfiguration
.MinimumLevel.Verbose()
.MinimumLevel.Override("Microsoft", LogEventLevel.Warning);
.WriteTo.MSSqlServer(output, tableName: "Log", schemaName: "WPS")
.Enrich.WithAspnetcoreHttpcontext(provider)
.Enrich.WithExceptionDetails();
});

我还添加了一个服务来处理返回到 UI 的 API 错误:

启动.cs

// Add Error Handling to all API endpoints
services.AddMvc(options => {
options.Filters.Add(new ApiExceptionFilter());
});

ApiExceptionFilter.cs

public class ApiExceptionFilter : ExceptionFilterAttribute
{
public override void OnException(ExceptionContext context)
{
ApiError apiError = null;
if (context.Exception is ApiException)
{
var ex = context.Exception as ApiException;
context.Exception = null;
apiError = new ApiError(ex.Message);
apiError.Errors = ex.Errors;
context.HttpContext.Response.StatusCode = ex.StatusCode;
}
else if (context.Exception is UnauthorizedAccessException)
{
apiError = new ApiError("Unauthorized Access");
context.HttpContext.Response.StatusCode = 403;
}
else
{
string msg = context.Exception.GetBaseException().Message;
#if !DEBUG
string stack = "";
#else
string stack = context.Exception.StackTrace;
#endif

apiError = new ApiError(msg);
apiError.Detail = stack;
context.HttpContext.Response.StatusCode = 500;
}
context.Result = new JsonResult(apiError);

base.OnException(context);
}
}

但是,在添加 ApiExceptionFilter 之后,不再记录异常。

我已经尝试再次抛出异常,但是我的自定义消息不再返回到 UI。

ApiExceptionFilter.cs

        base.OnException(context);
throw context.Exception.GetBaseException(); // throw again?

对我哪里出错有什么建议吗?

最佳答案

在这里,您最好的选择是像您在这里所做的那样捕获并过滤掉异常,同时将其记录在您的异常过滤器中。

通常捕获和处理异常的代码负责记录它;这就是没有过滤器时发生的情况——顶级异常处理程序正在捕获并记录异常。一旦您开始自己处理异常,您还要负责记录它。

关于c# - 添加自定义 ExceptionFilter 后,Serilog 会立即停止记录异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58736985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com