React Ant Design Pro .Net5 WebApi如何搭建后端环境并实现日志与异常处理?

2026-05-23 06:561阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计614个文字,预计阅读时间需要3分钟。

使用 .NET Core 和 NLog 进行日志记录、异常处理、过滤器、中间件:- 日志记录与异常处理- 过滤器应用- 中间件集成- 便捷的开发者定位问题- 记录各类信息- 配合其他分析框架使用- 收集日志信息的多种框架:Log4net、NLog、Exc等

.net core NLog 日志、异常处理 过滤器 中间件 一、日志

日志具有帮助开发者快速的定位问题,记录各种信息,配合其他分析框架使用等等功能,收集日志的各类框架如:Log4net、NLog、Exceptionless、Serilog等等,百度或园子里介绍及对比文章不胜枚举,此不赘述。易用为主,选择NLog先集成,方便后面演示使用。

1、安装 NLog.Web.AspNetCore

2、新建 nlog.config,只改了输出路径。(配置和变量介绍参考最后链接,就不贴代码了)

3、注入到框架中,测试输出效果

二、异常处理

异常处理分为两种,一种是过滤器,一种是中间件。过滤器只能捕获Action以内的异常,而中间件可以捕获全局的异常,也可以只用中间件捕获全局异常,但通常是有所区分的。

1、过滤器 (1)新建一个异常过滤器 ExceptionFilter,注入到框架中

(2)ExceptionFilter 继承 IAsyncExceptionFilter 接口,代码如下:

public class ExceptionFilter : IAsyncExceptionFilter { private readonly ILogger<ExceptionFilter> _logger; public ExceptionFilter(ILogger<ExceptionFilter> logger) { _logger = logger; } public Task OnExceptionAsync(ExceptionContext context) { if (context.ExceptionHandled == false) { string msg = context.Exception.Message; context.Result = new ContentResult { Content = msg, StatusCode = 200, ContentType = "application/json" }; _logger.LogError("ExceptionFilter:" + msg); } context.ExceptionHandled = true; //设置异常已处理了,否则会被异常中间件再次捕获。 return Task.CompletedTask; } } (3)在插入接口直接抛出异常,swagger调用接口测试,输出日志

2、中间件 (1)一定要按顺序注册且异常捕获最先

(2)启动项目,捕获异常

三、前人栽树,后人乘凉

Nlog日志:
github.com/NLog/NLog/wiki/Getting-started-with-ASP.NET-Core-5
www.cnblogs.com/tinys-top/p/12002673.html
异常处理
www.cnblogs.com/lucky_hu/p/12444832.html
www.cnblogs.com/dotnet261010/p/13193124.html

测试签名

本文共计614个文字,预计阅读时间需要3分钟。

使用 .NET Core 和 NLog 进行日志记录、异常处理、过滤器、中间件:- 日志记录与异常处理- 过滤器应用- 中间件集成- 便捷的开发者定位问题- 记录各类信息- 配合其他分析框架使用- 收集日志信息的多种框架:Log4net、NLog、Exc等

.net core NLog 日志、异常处理 过滤器 中间件 一、日志

日志具有帮助开发者快速的定位问题,记录各种信息,配合其他分析框架使用等等功能,收集日志的各类框架如:Log4net、NLog、Exceptionless、Serilog等等,百度或园子里介绍及对比文章不胜枚举,此不赘述。易用为主,选择NLog先集成,方便后面演示使用。

1、安装 NLog.Web.AspNetCore

2、新建 nlog.config,只改了输出路径。(配置和变量介绍参考最后链接,就不贴代码了)

3、注入到框架中,测试输出效果

二、异常处理

异常处理分为两种,一种是过滤器,一种是中间件。过滤器只能捕获Action以内的异常,而中间件可以捕获全局的异常,也可以只用中间件捕获全局异常,但通常是有所区分的。

1、过滤器 (1)新建一个异常过滤器 ExceptionFilter,注入到框架中

(2)ExceptionFilter 继承 IAsyncExceptionFilter 接口,代码如下:

public class ExceptionFilter : IAsyncExceptionFilter { private readonly ILogger<ExceptionFilter> _logger; public ExceptionFilter(ILogger<ExceptionFilter> logger) { _logger = logger; } public Task OnExceptionAsync(ExceptionContext context) { if (context.ExceptionHandled == false) { string msg = context.Exception.Message; context.Result = new ContentResult { Content = msg, StatusCode = 200, ContentType = "application/json" }; _logger.LogError("ExceptionFilter:" + msg); } context.ExceptionHandled = true; //设置异常已处理了,否则会被异常中间件再次捕获。 return Task.CompletedTask; } } (3)在插入接口直接抛出异常,swagger调用接口测试,输出日志

2、中间件 (1)一定要按顺序注册且异常捕获最先

(2)启动项目,捕获异常

三、前人栽树,后人乘凉

Nlog日志:
github.com/NLog/NLog/wiki/Getting-started-with-ASP.NET-Core-5
www.cnblogs.com/tinys-top/p/12002673.html
异常处理
www.cnblogs.com/lucky_hu/p/12444832.html
www.cnblogs.com/dotnet261010/p/13193124.html

测试签名