在AspNetCore中扩展Log系列 - 介绍开源类库的使用(一)
转发时请注明原创作者及地址,否则追究责任。
原创:alunchen
当创建aspnetcore项目时
当我们创建一个aspnetcore项目时,需要我们手动添加log:
services.addloging();
我们发现,log在微软原生的包microsoft.extensions.logging、microsoft.extensions.logging.configuration内。并且创建aspnetcore项目时,netcore sdk已经包括了这两个log的原生包。
使用类库
目前本人在微软原生日志类库的基础之上,写了一个log的扩展。目的是为了更好地扩展log。当我们需要自定义自己的log记录方式时,使用此库是你的明智选择。
类库地址信息
nuget地址:https://www.nuget.org/packages/alun.aspnetcore.log.extensions
github开源地址:https://github.com/cjt321/alun.aspnetcore.log.extensions
怎么使用此类库?
首先,引用nuget包的地址。在项目启动时,添加log的配置。
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上也有个包,但是此包只能满足一般的需求,对于复杂的需求还不能满足,需要用户自己扩展自己的逻辑。
以alun.aspnetcore.log.extensions.mongodb为例
此包是对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中提现了。并且默认自带了依赖注入,依赖注入的好处有很多,可查看本人的依赖注入文章系列。
可以关注本人的公众号,多年经验的原创文章共享给大家。