转发时请注明原创做者及地址,不然追究责任。
原创:alunchengit
当咱们建立一个AspNetCore项目时,须要咱们手动添加Log: github
services.AddLoging();mongodb
咱们发现,Log在微软原生的包Microsoft.Extensions.Logging、Microsoft.Extensions.Logging.Configuration内。而且建立ASPNetCore项目时,NetCore SDK已经包括了这两个Log的原生包。 spa
目前本人在微软原生日志类库的基础之上,写了一个Log的扩展。目的是为了更好地扩展Log。当咱们须要自定义本身的Log记录方式时,使用此库是你的明智选择。 3d
类库地址信息 日志
Nuget地址:https://www.nuget.org/packages/Alun.AspNetCore.Log.Extensionscode
GitHub开源地址:https://github.com/cjt321/Alun.AspNetCore.Log.Extensionsorm
怎么使用此类库? 对象
首先,引用Nuget包的地址。在项目启动时,添加Log的配置。 blog
services.AddLogging(cfg => { cfg.AddNvLog(new LogConfiguration(){UseTraceLog = false, UseDebugLog = true, UseInformationLog = true, UseErrorLog = true, UseCriticalLog = true}) .AddDefaultWriteLog(); });
在AddNvLog方法中,Log级别可配置:UseTraceLog、UseDebugLog、UseInformationLog、UseErrorLog、UseCriticalLog。 若是为true,则执行相应的Log。
那么何时记录Log呢?
很简单,就像咱们平时在NetCore中记录Log同样便可,无任何修改。可在源码WebApplicationDemo中看到记录Log。
当咱们须要扩展日志以本身的逻辑记录到文件、队列、MySql、Mongodb等持久化时,能够扩展类库,扩展也很简单。
对于mongodb扩展类库,nuget上也有个包,可是此包只能知足通常的需求,对于复杂的需求还不能知足,须要用户本身扩展本身的逻辑。
此包是对Log保存在Mongodb中。
此包在Nuget:https://www.nuget.org/packages/Alun.AspNetCore.Log.Extensions.MongoDb
1)安装Alun.AspNetCore.Log.Extensions的nuget,由于这里须要用到mongodb,因此安装MongoDB.Driver。
2)添加mongodb的writelog类,来继承IWriteLog。
注意,咱们在WriteLog方法中写日志,记录到mongodb中,此方法实现的是咱们须要自定义的逻辑。这里把日志经过实体方法,持久化。
为什么要继承IWriteLog?由于咱们须要用到本身的逻辑,继承此类为了使用DI/IOC时,能够直接注入继承IWriteLog的类。
众所周知,使用DI/IOC时。有一好处,全部的对象都存放在容器上,若是须要修改容器里面对象,则能够经过注入的方式修改。对于继承,咱们能够注入接口与实现类的方式,灵活变动实现类。
因此,咱们须要在容器上初始化IWriteLog与MongoDbWriteLog的关系。
3)添加扩展配置
咱们主要看初始化mongodb的writelog配置,这里在容器中注入了IWriteLog, MongoDbWriteLog的继承关系。
如何使用?
很简单,可查看WebApplicationDemo.MongoDb中,加入Mongdb的配置便可:
扩展类库的原理
使用依赖注入,注入咱们须要的Log逻辑类,如Mongdb中的MongoDbWriteLog。因此,须要扩展,只须要继承IWriteLog,而且注入,就能扩展类了,很方便。
读了本编文章的上部分时,慢慢会发现,使用Log扩展,就行完积木游戏同样,你想怎么‘组合’、怎么‘拆’均可以。若是你想把Log保存在队列,即实现IWriteLog,而且注入到容器中便可。若是你想把Log保存在Mongodb,同样的逻辑。因此,任意地组合,很方便。
以上,都是Net Core正在发展的方向:低耦合、高内聚。在Log中提现了。而且默认自带了依赖注入,依赖注入的好处有不少,可查看本人的依赖注入文章系列。
能够关注本人的公众号,多年经验的原创文章共享给你们。