Asp.net Core 系列之--4.事务、日志及错误处理
ChuanGoing 2019-11-17
这篇原本想把事务处理、日志处理、错误处理、授权与鉴权一并介绍完的,授权和鉴权我想结合自定义权限来介绍,全部放到这里篇幅可能太长,因此权限部分将会在下篇来介绍。先说下我接下来的打算把,下篇将介绍权限控制,结合Oauth2.0和OpenId(OIDC)以及自定义权限来介绍;完了后会结合之前所介绍的基础来实现一个简单的电商网站,当然是利用领域驱动设计来实现。我的这个系列的主题就是领域驱动设计,实现简单电商网站时将会深入的讲解下领域的划分原则及领域服务的场景,中间可能会尝试部分业务实现事件驱动。
本篇学习曲线:
1.日志记录
2.错误处理
3.事务处理
日志记录
NLog是一个记录日志组件,和log4net一样被广泛使用,它可以将日志保存到文本文件、CSV、控制台、VS调试窗口、数据库等。在之前例子中的WebApi项目中添加NLog.Web.AspNetCore的Nuget包,并添加如下配置:
简单介绍下配置信息,“targets”配置每个输出配置,我这里有3个输出:database、allfile、ownfile,分别表示输出到数据库和对应路径的日志文件下。
"rules"规则配置了4条:
1.将Debug以上级别(含)信息输出到allfile
2.忽略Microsoft.*开头的信息(对应的输出没有配置到任何文件),此配置一般忽略即可
3.将Debug以上级别(含)信息输出到ownfile(注意这里配置和allfile一样,一般配置级别高点的日志信息)
4.将Warn以上级别(含)信息输出到数据库
完了后,在Program.cs Main方法里面注册NLog:
var logger = NLogBuilder.ConfigureNLog($"Nlog.config").GetCurrentClassLogger(); try { CreateWebHostBuilder(args).Build().Run(); } catch (Exception ex) { logger.Error(ex, "Stopped program because of exception"); throw ex; } finally { NLog.LogManager.Shutdown(); }
注意不要忘了启用NLog组件使之生效
在OrderController的Add方法中加入以下代码:
用postman简单测试下,我们可以看到执行目录中多出来了日志信息
错误处理
这里一般我们关心的错误大概有两类:
1.内部错误,即通过框架(Mvc)管道准确的传入到内部系统中并发生错误的此类信息
2.框架(Mvc)执行管道的某些中间件时发生的错误或被中间件禁止继续访问的请求
因此,定义如下3个类:



通过Aop,很方便就可以实现错误信息的处理:

同时,Startup.cs的ConfigureServices中注册一下: