博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET 5 入门 (3) – Logging
阅读量:5160 次
发布时间:2019-06-13

本文共 2758 字,大约阅读时间需要 9 分钟。

ASP.NET 5 入门 (3) – Logging

前几天就关注到汤姆大叔的相关文档: .

讲的已经很清楚了, 这里就不加累述了,那么换一个角度,在实现方案和代码开发方面谈下自己的理解.

理解ASP.NET5的Logging

ASP.NET 5的Logging我认为其实就是2句话:

  • Logging的使用: 应用内部的Logging统一使用Microsoft.Framework.Logging接口.
  • Logging的实现: 通过不同的代理类向不同的Logging实现技术分发应用内部产生的Log.

Logging的使用其实就是依托2个基本接口:  ILogger和ILoggerFactory.

Logging的实现其实就是通过实现不同的ILoggerProvider代理接口和其他技术对接.

如果还是不明白可以看下目前Microsoft.Framework.Logging的源码,就清楚了:

 

                       

我们可以看到Abstractions就是Logging的通用接口,而Console, Nlog和TraceSouce就是3个内部提供的代理类.目前能够使用的只有Console和TraceSource代理, 而NLog并没有提交, 不过根据这里面的代码,我相信针对其他Logging技术比如Log4Net,Serilog的代理类也并不难实现.

如何使用通用Logging框架

使用Logging框架一共分3步:

  1. 使用依赖注入获取ILoggerFactory实现.
  2. 利用ILoggerFactory构建ILogger实例
  3. 使用ILogger实例输出Log信息.

我们还是以最经典的Startup的Configurate函数为例:

 

public void Configure(IApplicationBuilder app)   {     //利用最简单的GetService函数获取通过依赖注入获取ILoggerFactory实现     var loggerfactory = (ILoggerFactory)app.ApplicationServices.GetService(typeof(ILoggerFactory));     //创建logger实例     var logger = loggerfactory.CreateLogger
(); //输出一条Log信息 logger.LogWarning("这是一条警告信息"); }

那么这些输出的Log信息在那里显示呢,除了VS调试环境,很遗憾没有任何地方能看到这些信息,这是因为标准的Logging实现不实现任何输出,如果要想输出,必须加入各种代理类把Log分发出去.

加入Console代理

首先我们加入引用:

"Microsoft.Framework.Logging.Console": "1.0.0-beta4"

其次我们加入如下代码

var loggerfactory = (ILoggerFactory)app.ApplicationServices.GetService(typeof(ILoggerFactory));// 加入Console代理loggerfactory.AddConsole(minLevel:LogLevel.Information);

代理在加入在项目中只需要加一次,一般就在Configure函数中加入即可. 加入以上代码以后,所有从通用接口分发的Log信息都会显示在程序控制台上面,当然由于设置了minLevel属性,仅仅高于或等于Information等级的信息才会被显示.

加入TraceSource代理

如果仅仅是在控制台显示显然是不过瘾的,一般来说,我们会把log输出到文件,在目前的情况下我们只能通过TraceSource代理吧Log输出到文件. TraceSource是System.Diagnostics中的主要内容,大家应该并不陌生.

首先我们还是需要加入一些组件

"Microsoft.Framework.Logging.TraceSource": "1.0.0-beta4"

如果要让Core 5.0也支持,还必须加入

"System.Diagnostics.TextWriterTraceListener": "4.0.0-beta-22816"

实现的代码是(开发时自行加入所需的using语句):

var loggerfactory = (ILoggerFactory)app.ApplicationServices.GetService(typeof(ILoggerFactory));// Add trace source loggervar logFileStream = new FileStream("app.log", FileMode.Append);var traceListenter = new TextWriterTraceListener(logFileStream){     Filter = new EventTypeFilter(SourceLevels.Error | SourceLevels.Critical)};var source = new SourceSwitch("AppLog"){      Level = SourceLevels.All};loggerfactory.AddTraceSource(source, traceListenter);

根据以上代码,所有Error和Critical的Log信息会被输出到当前目录的app.log文件中去,如果要显示更多等级的信息请自行修改Filter.

该代理和Console一样,也只需要运行一次,同样建议在Configurate中运行.

其他代理的实现展望

其他的代理类目前是没有比较完整的实现,但我们可以预见到后续的实现方法其实并不难,就是:

  • 首先引入你使用的第三方Log实现,比如Log4Net,NLog,Serilog等.
  • 然后引入或者自行开发代理类, 一般这个代理类会为ILoggerFactory实现一个扩展函数 AddXXX() : 比如AddNlog , AddLog4Net , AddSeriLog 等等.
  • 最后在Configutate函数中调用这个扩展函数AddXXX() 函数把标准Logging分发到该第三方Log实现.

这就是目前ASP.NET 5 所提供的Logging分发思路和实现方案.

转载于:https://www.cnblogs.com/zergcom/p/4527779.html

你可能感兴趣的文章
Java环境/安装问题
查看>>
单链表 - 数据结构
查看>>
读写数据
查看>>
How Crushing Machinery Industry Better Develops Itself
查看>>
Spring框架的事务管理之声明式事务管理的类型
查看>>
身为多年的ubuntu用户。。。
查看>>
Educational Codeforces Round 24
查看>>
并查集 - 优化
查看>>
中文论文-LaTex模板
查看>>
P3538 [POI2012]OKR-A Horrible Poem
查看>>
CUDA高性能编程中文实战11章例子中多设备的例子编译提示问题
查看>>
Centos下安装软件的常用方法
查看>>
微信公众平台开发——为何不能在网页调用微信jsapi?
查看>>
emacs设置代理访问插件仓库
查看>>
wireshark自动化之tshark命令行
查看>>
Linux中more命令的实现
查看>>
【递归】二叉树的深度
查看>>
工程源码github地址
查看>>
MediaRecord与AudioRecord
查看>>
高性能网站架构设计之缓存篇(5)- Redis 集群(上)
查看>>