ASP.NET 5 入門 (3) – Logging

原文轉載自:http://www.cnblogs.com/zergcom/p/4527779.htmlhtml

ASP.NET 5 入門 (3) – Logging

前幾天就關注到湯姆大叔的相關文檔: 解讀ASP.NET 5 & MVC6系列(9):日誌框架.git

講的已經很清楚了, 這裏就不加累述了,那麼換一個角度,在實現方案和代碼開發方面談下本身的理解.github

理解ASP.NET5的Logging

ASP.NET 5的Logging我認爲其實就是2句話:app

  • Logging的使用: 應用內部的Logging統一使用Microsoft.Framework.Logging接口.
  • Logging的實現: 經過不一樣的代理類向不一樣的Logging實現技術分發應用內部產生的Log.

Logging的使用其實就是依託2個基本接口:  ILogger和ILoggerFactory.框架

Logging的實現其實就是經過實現不一樣的ILoggerProvider代理接口和其餘技術對接.ide

若是仍是不明白能夠看下目前Microsoft.Framework.Logging的源碼,就清楚了:函數

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

 

                       

咱們能夠看到Abstractions就是Logging的通用接口,而Console, Nlog和TraceSouce就是3個內部提供的代理類.目前可以使用的只有Console和TraceSource代理, 而NLog並無提交, 不過根據這裏面的代碼,我相信針對其餘Logging技術好比Log4Net,Serilog的代理類也並不難實現.spa

如何使用通用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分發思路和實現方案.

相關文章
相關標籤/搜索