在.NET使用日誌框架第一時間會想到NLog或是Log4Net,Serilog 是這幾年快速崛起的Log框架之一,Serilog是以Structured logging 爲基礎進行設計,透過logging API 能夠輕鬆的記錄應用程式中對象屬性,方便快速進行logging 內容進行查詢與分析,並將其紀錄內容透過json (可指定) 的方式輸出。web
首先,將Serilog.AspNetCore NuGet軟件包安裝到您的應用程序中。json
Serilog.AspNetCore
而後,在應用程序的Program.cs文件中,首先配置Serilog。app
public static IConfiguration Configuration { get; } = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true) .AddEnvironmentVariables() .Build(); public static void Main(string[] args) { Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(Configuration) .Enrich.FromLogContext() .CreateLogger(); try { CreateHostBuilder(args).Build().Run(); } catch (Exception ex) { Log.Fatal(ex, "主機意外終止"); } finally { Log.CloseAndFlush(); } } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseSerilog() // <-添加此行 .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
接着,更改appsettings.json配置:刪除"Logging"節點,增長"Serilog"節點框架
"Serilog": { "MinimumLevel": { "Default": "Information" }, "WriteTo": [ { "Name": "Console" } ] },
接着,控制器的構造函數中請求logger實例函數
private readonly ILogger<LogController> logger; // <-添加此行 public LogController(ILogger<LogController> logger) { this.logger = logger ?? throw new ArgumentNullException(nameof(logger)); }
最後,在Get方法中使用Log測試
[HttpGet] public void Get() { logger.LogInformation("測試1"); // <-添加此行 }