ASP.NET 5 入门 (3) – Logging

时间:2022-09-23 18:48:46

ASP.NET 5 理解和入门

建立和开发ASP.NET 5 项目

使用自定义配置文件

ASP.NET 5 入门 (3) – Logging

前几天就关注到汤姆大叔的相关文档: 解读ASP.NET 5 & MVC6系列(9):日志框架.

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

理解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的源码,就清楚了:

https://github.com/aspnet/Logging/tree/dev/src

ASP.NET 5 入门 (3) – 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<Startup>();
//输出一条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 logger
var 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分发思路和实现方案.

ASP.NET 5 入门 (3) – Logging的更多相关文章

  1. 25、ASP&period;NET MVC入门到精通——Spring&period;net-业务层仓储

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 上一节,我们已经把项目框架的雏形搭建好了,那么现在我来开始业务实现,在业务实现的过程当中,不断的来完善我们现有的框架. 1.假设我们来做一个 ...

  2. ASP&period;NET Core 入门教程 10、ASP&period;NET Core 日志记录&lpar;NLog&rpar;入门

    一.前言 1.本教程主要内容 ASP.NET Core + 内置日志组件记录控制台日志 ASP.NET Core + NLog 按天记录本地日志 ASP.NET Core + NLog 将日志按自定义 ...

  3. ASP&period;NET Aries 入门开发教程7:DataGrid的行操作(主键操作区)

    前言: 抓紧勤奋,再接再励,预计共10篇来结束这个系列. 上一篇介绍:ASP.NET Aries 入门开发教程6:列表数据表格的格式化处理及行内编辑 本篇介绍主键操作区相关内容. 1:什么时候有默认的 ...

  4. ASP&period;NET Aries 入门开发教程6:列表数据表格的格式化处理及行内编辑

    前言: 为了赶进度,周末也写文了! 前几篇讲完查询框和工具栏,这节讲表格数据相关的操作. 先看一下列表: 接下来我们有很多事情可以做. 1:格式化 - 键值的翻译 对于“启用”列,已经配置了格式化 # ...

  5. ASP&period;NET Aries 入门开发教程4:查询区的下拉配置

    背景: 今天去深圳溜达了一天,刚回来,看到首页都是微软大法好,看来离.NET的春天就差3个月了~~ 回到正题,这篇的教程讲解下拉配置. 查询区的下拉配置: 1:查询框怎么配置成下拉? 在配置表头:格式 ...

  6. ASP&period;NET MVC4入门到精通系列目录汇总

    序言 最近公司在招.NET程序员,我发现好多来公司面试的.NET程序员居然都没有 ASP.NET MVC项目经验,其中包括一些工作4.5年了,甚至8年10年的,许多人给我的感觉是:工作了4.5年,We ...

  7. 1、ASP&period;NET MVC入门到精通——新语法

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 在学习ASP.NET MVC之前,有必要先了解一下C#3.0所带来的新的语法特性,这一点尤为重要,因为在MVC项目中我们利用C#3.0的新特 ...

  8. 5、ASP&period;NET MVC入门到精通——NHibernate代码映射

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 上一篇NHibernate学习笔记—使用 NHibernate构建一个ASP.NET MVC应用程序 使用的是xml进行orm映射,那么这一 ...

  9. 6、ASP&period;NET MVC入门到精通——ASP&period;Net的两种开发方式

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 目前,ASP.NET中两种主流的开发方式是:ASP.NET Webform和ASP.NET MVC.从下图可以看到ASP.NET WebFo ...

随机推荐

  1. mybatis里的foreach语句

    相信用了Mybatis的朋友们,都曾有一个疑惑,就是foreach是怎么用的,下面我就简单讲讲我的理解: foreach主要用在SQL语句中迭代一个集合.foreach元素的属性主要由item,ind ...

  2. android插件中或者library中获取asstes文件

    在插件中或者library的项目中把文件放在asstes,不能用context.getResources().getAssets().open(fileName)读取到流,会报FileNotFound ...

  3. 滚动div的动画

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  4. PostgreSQL Insight Monitor pgstat

    PostgreSQL Insight Monitor  pgstat pgstat 是一个连接到数据库并获取数据库的活动状态的命令行工具. PostgreSQL有许多状态: archiver for ...

  5. Android &vert;&vert; IOS录制mp3语音文件方法

    Android Android Supported Media Formats : http://developer.android.com/guide/appendix/media-formats. ...

  6. Windows Azure移动终端云服务管理(公测版)

    概览 云在远方,管理在您手中.在这个移动为先 云为先的世界,服务不再是基于请求才提供,而是主动来到身边方便您的模式了.我们最近将会陆续推出几大移动端利器帮助您随时随地管理您的云服务. 首批利器之中排名 ...

  7. c语言中的结构体指针类型的cast

    1.我们在c语言中会经常碰到强制类型转换. 在这,我介绍一种结构pointer类型转换,但是有前提(有点类似于c++中的继承中的子父对象的cast). 简单的介绍一下: 首先我们要知道一个结构的指针, ...

  8. jQuery插件的点点滴滴

    说起jQuery插件,很多人的脑海种已经有了一定的雏形,仿佛感觉仅仅就是那样子,事实呢?当你看了Bootstrap.js,品读了slidesjs,观摩了jquery.cycle2.js,不禁发现,原来 ...

  9. IP子网掩码划分及设置

    IP子网掩码划分及设置 定长子网掩码: 一.子网掩码的计算 TCP/IP网间网技术产生于大型主流机环境中,它能发展到今天的规模是当初的设计者们始料未及的.网间网规模的迅速扩展对IP地址模式的威胁并不是 ...

  10. leetcode56&colon;合并区间

    给出一个区间的集合,请合并所有重叠的区间.(解题思想来源于:https://blog.csdn.net/qq_34364995/article/details/80788049 ) 示例 1: 输入: ...