ASP.NET 5 理解和入门html
使用自定义配置文件github
前几天就关注到汤姆大叔的相关文档: 解读ASP.NET 5 & MVC6系列(9):日志框架.app
讲的已经很清楚了, 这里就不加累述了,那么换一个角度,在实现方案和代码开发方面谈下本身的理解.框架
ASP.NET 5的Logging我认为其实就是2句话:ide
Logging的使用其实就是依托2个基本接口: ILogger和ILoggerFactory.函数
Logging的实现其实就是经过实现不一样的ILoggerProvider代理接口和其余技术对接.ui
若是仍是不明白能够看下目前Microsoft.Framework.Logging的源码,就清楚了:spa
https://github.com/aspnet/Logging/tree/dev/src代理
咱们能够看到Abstractions就是Logging的通用接口,而Console, Nlog和TraceSouce就是3个内部提供的代理类.目前可以使用的只有Console和TraceSource代理, 而NLog并无提交, 不过根据这里面的代码,我相信针对其余Logging技术好比Log4Net,Serilog的代理类也并不难实现.
使用Logging框架一共分3步:
咱们仍是以最经典的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分发出去.
首先咱们加入引用:
"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等级的信息才会被显示.
若是仅仅是在控制台显示显然是不过瘾的,通常来讲,咱们会把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中运行.
其余的代理类目前是没有比较完整的实现,但咱们能够预见到后续的实现方法其实并不难,就是:
这就是目前ASP.NET 5 所提供的Logging分发思路和实现方案.