在将我們的ASP.NET 5示例站點(about.cnblogs.com)更新至ASP.NET 5 RC1的時候,我們增加了控制台日志功能。在ASP.NET 5添加日志功能很簡單,隻需在project.json中添加Microsoft.Extensions.Logging.Console的引用,并且在 Startup.cs 中添加 loggerFactory.AddConsole()
在将我們的ASP.NET 5示例站點(about.cnblogs.com)更新至ASP.NET 5 RC1的時候,我們增加了控制台日志功能。
在ASP.NET 5添加日志功能很簡單,隻需在project.json中添加Microsoft.Extensions.Logging.Console的引用:
"dependencies":{
"Microsoft.Extensions.Logging.Console": "1.0.0-*"
}
并且在 Startup.cs 中添加 loggerFactory.AddConsole() :
using Microsoft.Extensions.Logging;
namespace CNBlogs.AboutUs.Web
{
public class Startup
{
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole();
}
}
}
然後在控制台就能看到站點運作時的日志資訊:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuMDN1MDMwMTOzETLwQjN4UDOyUTMxITMxUTMwITL1kjN1MzLcFTM1EDMy8CX1kjN1MzLcd2bsJ2Lc12bj5ycn9Gbi52YuUTMwIzcldWYtl2Lc9CX6MHc0RHaiojIsJye.png)
但控制台日志檢視與查找日志資訊都不友善,檔案日志才是解決之道。是以打算增加檔案日志功能,那在ASP.NET 5中如何實作呢?
首先要選擇一個日志元件,我們開始選用的是 Serilog.Framework.Logging。
先在 project.json 中添加 Serilog.Framework.Logging 的引用:
"dependencies":{
"Serilog.Framework.Logging":"1.0.0-*"
}
然後運作dnu restore指令安裝nuget包包。
接着在 Startup.cs 中添加如下的代碼:
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 運作時卻出現了下面的錯誤:
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進行改寫,任重而道遠。