zoukankan      html  css  js  c++  java
  • 在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。

    clipboard

    扩展类库

          当我们需要扩展日志以自己的逻辑记录到文件、队列、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。

    clipboard[1]

          注意,我们在WriteLog方法中写日志,记录到mongodb中,此方法实现的是我们需要自定义的逻辑。这里把日志通过实体方法,持久化。

          为何要继承IWriteLog?因为我们需要用到自己的逻辑,继承此类为了使用DI/IOC时,可以直接注入继承IWriteLog的类。

          众所周知,使用DI/IOC时。有一好处,所有的对象都存放在容器上,如果需要修改容器里面对象,则可以通过注入的方式修改。对于继承,我们可以注入接口与实现类的方式,灵活变更实现类。

     

          所以,我们需要在容器上初始化IWriteLog与MongoDbWriteLog的关系。

          3)添加扩展配置

    clipboard[2]

          我们主要看初始化mongodb的writelog配置,这里在容器中注入了IWriteLog, MongoDbWriteLog的继承关系。

    如何使用?

          很简单,可查看WebApplicationDemo.MongoDb中,加入Mongdb的配置即可:

    clipboard[3]

    扩展类库的原理

          使用依赖注入,注入我们需要的Log逻辑类,如Mongdb中的MongoDbWriteLog。所以,需要扩展,只需要继承IWriteLog,并且注入,就能扩展类了,很方便。

     

    总结

          读了本编文章的上部分时,慢慢会发现,使用Log扩展,就行完积木游戏一样,你想怎么‘组合’、怎么‘拆’都可以。如果你想把Log保存在队列,即实现IWriteLog,并且注入到容器中即可。如果你想把Log保存在Mongodb,一样的逻辑。所以,任意地组合,很方便。

          以上,都是Net Core正在发展的方向:低耦合、高内聚。在Log中提现了。并且默认自带了依赖注入,依赖注入的好处有很多,可查看本人的依赖注入文章系列。

     

     

     

    可以关注本人的公众号,多年经验的原创文章共享给大家。

  • 相关阅读:
    mysql索引最左匹配的理解(转载于知乎回答)
    mysql深度优化与理解(迄今为止读到最优秀的mysql博客)
    PHP数组函数总结与使用
    进程(process)和线程(thread)
    联合索引使用规则(转载)
    mysql优化大全(转自别人 )
    HTTP隧道解决的问题
    HTTP代理协议 HTTP/1.1的CONNECT方法
    vant弹窗提示
    vue获取验证码倒计时
  • 原文地址:https://www.cnblogs.com/alunchen/p/9988564.html
Copyright © 2011-2022 走看看