.NET 黑魔法 - 自定义日志扩展
我们开发程序时避免不了要有日志系统,我们希望有一个通用的、不夹杂任何方言的调用方式,简单地说就是保留微软日志框架的注入方式和使用方式。
比如我们希望这样调用:

我们不希望有个 IAbcLogger, IMyLogger, IWhosLogger,这样会给使用者造成一定的学习成本。
那么,在.net平台下可以使用微软的日志扩展及依赖注入
首先,需要buget引用这2个:


以asp.net core为例,这样使用:

使用了这个提供程序.net core框架就会遵循你自己的日志处理逻辑,Provider这样实现:

这个SharpLogger就是日志数据真正被存储的地方:


当然,可以根据你的需要编写日志事务与日志的处理级别,BeginScope IsEnabled这2个方法便是。
Log<TState>() 参数忽略,这个方法便是日志的保存方法,自由发挥吧。
:)
.NET 黑魔法 - 自定义日志扩展的更多相关文章
- ELK收集Nginx自定义日志格式输出
		
1.ELK收集日志的有两种常用的方式: 1.1:不修改源日志格式,简单的说就是在logstash中转通过 grok方式进行过滤处理,将原始无规则的日志转换为规则日志(Logstash自定义日志格式) ...
 - Dubbo自定义日志拦截器
		
前言 上一篇文章 Spring aop+自定义注解统一记录用户行为日志 记录了 web层中通过自定义注解配合Spring aop自动记录用户行为日志的过程.那么按照分布式架构中Dubbo服务层的调用过 ...
 - asp.net core mcroservices 架构之 分布式日志(二)之自定义日志开发
		
netcore日志原理 netcore的日志是作为一个扩展库存在的,每个组件都有它的入口,那么作为研究这个组件的入口是最好的,首先看两种方式: 这个是源码例子提供的. var loggingConfi ...
 - 《手把手教你》系列基础篇(八十五)-java+ selenium自动化测试-框架设计基础-TestNG自定义日志-下篇(详解教程)
		
1.简介 TestNG为日志记录和报告提供的不同选项.现在,宏哥讲解分享如何开始使用它们.首先,我们将编写一个示例程序,在该程序中我们将使用 ITestListener方法进行日志记录. 2.Test ...
 - c#自定义日志记录
		
废话不多说,直接上代码: 很简单:将类复制到项目中,最后在配置文件上配置一下:logUrl即可. 默认保存在:项目/temp/log /// <summary> /// 日志类 /// & ...
 - tomcat accesslog日志扩展
		
由于工作需要,最近对tomcat的日志进行了一些研究,发现其日志大致可以分为两类,一类是运行日志,即平常我们所说的catalina.out日志,由tomcat内部代码调用logger打印出来的:另一类 ...
 - YII2 自定义日志路径
		
YII 提供的日志写入方法: 1.Yii::getLogger()->log($message, $level, $category = 'application') 2.Yii::trace( ...
 - 转:NLog 自定义日志内容,写日志到数据库;修改Nlog.config不起作用的原因
		
转:http://www.cnblogs.com/tider1999/p/4308440.html NLog的安装请百度,我安装的是3.2.NLog可以向文件,数据库,邮件等写日志,想了解请百度,这里 ...
 - Java自定义日志输出文件
		
Java自定义日志输出文件 日志的打印,在程序中是必不可少的,如果需要将不同的日志打印到不同的地方,则需要定义不同的Appender,然后定义每一个Appender的日志级别.打印形式和日志的输出路径 ...
 
随机推荐
- es6 数组实例的 find() 和 findIndex()
			
数组实例的find方法,用于找出第一个符合条件的数组成员.它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员.如果没有符合条件的成员,则返回u ...
 - 垃圾回收GC3种算法的衍生品  增量回收:预测和控制GC所产生的中断时间
			
小结: 1.GC和程序处理的本质是无关的: 2.增量回收:预测和控制GC所产生的中断时间: 1. 分代回收 GC和程序处理的本质是无关的,因此它所消耗的时间越短越好.分代回收的目的,正是为了在程序 运 ...
 - 406 UDP协议是面向非连接的协议
			
HTTP The Definitive Guide Table 3-1. Common HTTP methods Method Description Message body? GET ...
 - xcode工程编译错误:"An instance 0xca90200 of class UITableView was deallocated while key value observers were still registered with it"
			
An instance 0xca90200 of class UITableView was deallocated while key value observers were still regi ...
 - [X][xrandr][archlinux] 手动调整显示器分辨率
			
有一些时候,电脑并不能正确的识别出显示器的最大分辨率,这有可能是软件的原因,硬件的原因,显示器的原因,VGA线的原因等其他原因. 我遇到的情况,是开机时候连着VGA的话,就可以正确识别.如果使用中间进 ...
 - [报错]ios开发 failed to read file attributes for
			
下载第三方demo,运行报错: failed to read file attributes for https://stackoverflow.com/questions/46301270/fa ...
 - SQL DATE_FORMAT() 函数
			
参照原文:https://blog.csdn.net/moakun/article/details/82290387 DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据 MySQL 使 ...
 - js 正则判断字符串下划线的长度
			
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
 - oracle日志归档空间清理
			
进入机器,设置环境变量,如: export ORACLE_HOME=/main/app/oracle/product//db_1 export ORACLE_SID=devdb 然后切换oracle用 ...
 - ubuntu安装jupyter 并设置远程访问
			
Jupyter Notebook是一个Web应用程序,允许您创建和共享包含实时代码,方程,可视化和说明文本的文档. 简单的介绍就是:Jupyter Notebook是Ipython的升级版,而Ipyt ...