在將咱們的ASP.NET 5示例站點(about.cnblogs.com)升級至ASP.NET 5 RC1的時候,咱們增長了控制檯日誌功能。git
在ASP.NET 5添加日誌功能很簡單,只需在project.json中添加Microsoft.Extensions.Logging.Console的引用:github
"dependencies":{ "Microsoft.Extensions.Logging.Console": "1.0.0-*" }
而且在 Startup.cs 中添加 loggerFactory.AddConsole() :json
using Microsoft.Extensions.Logging; namespace CNBlogs.AboutUs.Web { public class Startup { public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory) { loggerFactory.AddConsole(); } } }
而後在控制檯就能看到站點運行時的日誌信息:app
但控制檯日誌查看與查找日誌信息都不方便,文件日誌纔是解決之道。因此打算增長文件日誌功能,那在ASP.NET 5中如何實現呢?ui
首先要選擇一個日誌組件,咱們開始選用的是 Serilog.Framework.Logging。spa
先在 project.json 中添加 Serilog.Framework.Logging 的引用:rest
"dependencies":{ "Serilog.Framework.Logging":"1.0.0-*" }
而後運行dnu restore命令安裝nuget包包。日誌
接着在 Startup.cs 中添加以下的代碼:code
using System.IO; using Serilog; public class Startup { public Startup(IApplicationEnvironment appEnv) { Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .WriteTo.RollingFile(Path.Combine( appEnv.ApplicationBasePath,"logs/log-{Date}.txt")) .CreateLogger(); } public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory) { loggerFactory.AddSerilog(); } }
用 dnx kestrel 運行時卻出現了下面的錯誤:blog
DNXCore,Version=v5.0 error CS1061: 'LoggerSinkConfiguration' does not contain a definition for 'RollingFile' and no extension method 'RollingFile' accepting a first argument of type 'LoggerSinkConfiguration' could be found (are you missing a using directive or an assembly reference?)
而將 .WriteTo.RollingFile 改成 .WriteTo.TextWriter(Console.Out) 使用控制檯則能正常顯示日誌信息。
開始覺得是缺乏了某個命名空間的引用,後來發現是由於 serilog 的 .RollingFile 目前還不支持 .NET Core。
只能尋找其它的日誌組件。
準備改用NLog,結果發現NLog的文件日誌也不支持 .NET Core。
log4net就更別談了,它還沒開始支持.NET Core。
因而,不得不面對這樣的現實:目前在Linux上跑ASP.NET 5站點,居然沒有可用的將日誌信息記錄到文件的日誌組件。
因此,.NET的跨平臺不單單是.NET Core的跨平臺,並且整個.NET生態的跨平臺,不少組件都須要針對.NET Core進行改寫,任重而道遠。