在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
原文转载自:http://www.cnblogs.com/zergcom/p/4527779.html 前几天就关注到汤姆大叔的相关文档: 解读ASP.NET 5 & MVC6系列(9):日志框架. 讲的已经很清楚了, 这里就不加累述了,那么换一个角度,在实现方案和代码开发方面谈下自己的理解. 理解ASP.NET5的LoggingASP.NET 5的Logging我认为其实就是2句话:
Logging的使用其实就是依托2个基本接口: ILogger和ILoggerFactory. Logging的实现其实就是通过实现不同的ILoggerProvider代理接口和其他技术对接. 如果还是不明白可以看下目前Microsoft.Framework.Logging的源码,就清楚了: https://github.com/aspnet/Logging/tree/dev/src
我们可以看到Abstractions就是Logging的通用接口,而Console, Nlog和TraceSouce就是3个内部提供的代理类.目前能够使用的只有Console和TraceSource代理, 而NLog并没有提交, 不过根据这里面的代码,我相信针对其他Logging技术比如Log4Net,Serilog的代理类也并不难实现. 如何使用通用Logging框架使用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("这是一条警告信息"); }
加入Console代理首先我们加入引用: "Microsoft.Framework.Logging.Console": "1.0.0-beta4" 其次我们加入如下代码 var loggerfactory = (ILoggerFactory)app.ApplicationServices.GetService(typeof(ILoggerFactory)); // 加入Console代理 loggerfactory.AddConsole(minLevel:LogLevel.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);
该代理和Console一样,也只需要运行一次,同样建议在Configurate中运行. 其他代理的实现展望其他的代理类目前是没有比较完整的实现,但我们可以预见到后续的实现方法其实并不难,就是:
这就是目前ASP.NET 5 所提供的Logging分发思路和实现方案. |
请发表评论