转发时请注明原创作者及地址,否则追究责任。

原创: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中提现了。并且默认自带了依赖注入,依赖注入的好处有很多,可查看本人的依赖注入文章系列。

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

在AspNetCore中扩展Log系列 - 介绍开源类库的使用(一)的更多相关文章

  1. 如何使用T-SQL备份还原数据库及c#如何调用执行? C#中索引器的作用和实现。 jquery控制元素的隐藏和显示的几种方法。 localStorage、sessionStorage用法总结 在AspNetCore中扩展Log系列 - 介绍开源类库的使用(一) span<T>之高性能字符串操作实测

    如何使用T-SQL备份还原数据库及c#如何调用执行? 准备材料:Microsoft SQL Server一部.需要还原的bak文件一只 一.备份 数据库备份语句:user master backup ...

  2. 提高IOS开发效率的常用网站、开源类库及工具

    时间过得很快,学习iOS也已经2年左右了.在这里整理一下,在平台平常开发过程中使用比较多的开源类库.网站与工具吧! 一.网站: UI网站: 1.https://www.cocoacontrols.co ...

  3. 广告行业中那些趣事系列7:实战腾讯开源的文本分类项目NeuralClassifier

    摘要:本篇主要分享腾讯开源的文本分类项目NeuralClassifier.虽然实际项目中使用BERT进行文本分类,但是在不同的场景下我们可能还需要使用其他的文本分类算法,比如TextCNN.RCNN等 ...

  4. Chrome浏览器扩展开发系列之十四

    Chrome浏览器扩展开发系列之十四:本地消息机制Native messaging 时间:2015-10-08 16:17:59      阅读:1361      评论:0      收藏:0    ...

  5. 在KVM虚拟机中使用spice系列之二(USB映射,SSL,密码,多客户端支持)

    在KVM虚拟机中使用spice系列之二(USB映射,SSL,密码,多客户端支持) 发布时间: 2015-02-27 00:16 1.spice的USB重定向 1.1 介绍 使用usb重定向,在clie ...

  6. Apache中 RewriteRule 规则参数介绍

    Apache中 RewriteRule 规则参数介绍 摘要: Apache模块 mod_rewrite 提供了一个基于正则表达式分析器的重写引擎来实时重写URL请求.它支持每个完整规则可以拥有不限数量 ...

  7. 在C#代码中应用Log4Net系列教程

    在C#代码中应用Log4Net系列教程(附源代码)   Log4Net应该可以说是DotNet中最流行的开源日志组件了.以前需要苦逼写的日志类,在Log4Net中简单地配置一下就搞定了.没用过Log4 ...

  8. 深入理解php内核 编写扩展 I:介绍PHP和Zend

    内容: 编写扩展I -  PHP和Zend起步 原文:http://devzone.zend.com/public/view/tag/Extension Part I: Introduction to ...

  9. AspNetCore中使用Ocelot之 IdentityServer4(1)

    AspNetCore中使用Ocelot之 IdentityServer4(1) 前言: OceLot网关是基于AspNetCore 产生的可扩展的高性能的企业级Api网关,目前已经基于2.0 升级版本 ...

随机推荐

  1. U-Boot Makefile分析(1)配置脚本mkconfig分析

    我们在编译U-Boot之前,需要根据当前使用的板子进行配置,例如make s5p_goni_config,接着才能进行编译make.下面首先分析配置阶段U-Boot做了哪些事情. 由于执行这些命令是在 ...

  2. 一窍懂PID

    这是学习PID时的理解,做个笔记! 一:首选,说一下一些基本概念,为了更好理解. PID:就是对输入偏差进行比例积分微分运算,运算的叠加结果去控制执行机构. P(proportion):比例,就是对输 ...

  3. [转] An Introduction to Mutual SSL Authentication

    1. Introduction Mutual SSL authentication or certificate based mutual authentication refers to two p ...

  4. 大叔学ML第二:线性回归

    目录 基本形式 求解参数\(\vec\theta\) 梯度下降法 正规方程导法 调用函数库 基本形式 线性回归非常直观简洁,是一种常用的回归模型,大叔总结如下: 设有样本\(X\)形如: \[\beg ...

  5. Javascript高级编程学习笔记(58)—— 事件(2)事件处理程序

    事件处理程序 事件处理程序即响应某个事件的函数 事件处理程序以 “on” 开头 如“onclick”,“onload” HTML事件处理程序 某个元素支持的每种事件都可以使用一个与响应的事件处理程序同 ...

  6. Man方法

    Main方法相当一个主线程,JVM会自动寻找class文件中的main方法并执行(请思考tomcat加载java web项目启动的线程数和每次tomcat服务器接收到请求,是不是要发起一个线程去处理) ...

  7. 【原】以setTimeout来聊聊Event Loop

    平时的工作中,也许你会经常用到setTimeout这个方法,可是你真的了解setTimeout吗?本文想通过总结setTimeout的用法,顺便来探索javascript里面的事件执行机制. setT ...

  8. Android--UI之Radio、Check、Toggle

    前言 这篇博客讲解一下Android平台下,RadioButton.CheckBox以及ToggleButton三个控件的用法,因为这三个控件之中都存在一个选中或是没选中的状态,所以放在一起讲解. 这 ...

  9. 全网最全最详细的Windows下安装Anaconda2 / Anaconda3(图文详解)

    不多说,直接上干货! 说明: Anaconda2-5.0.0-Windows-x86_64.exe安装下来,默认的Python2.7 Anaconda3-4.2.0-Windows-x86_64.ex ...

  10. CentOS7.0小随笔——指令基本操作(Part.A)

    与其说是CentOS7.0的小随笔,说老实话,基本指令在每个发行版本的Linux中都基本上是一致的. Part.A部分我们讲述以下四个方面:命令行界面与图形界面.Linux系统的关闭与重启.命令行帮助 ...