.NET Core 支持適用于各種內置和第三方日志記錄提供程式的日志記錄 API, 先來看下如何將日志記錄 API 與內置提供程式一起使用,
呼叫 CreateDefaultBuilder,這將添加以下日志記錄提供程式:
-
控制臺
-
除錯
-
EventSource
-
EventLog:僅限 Windows
-
public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); }
若要替代Host.CreateDefaultBuilder 添加的默認日志記錄提供程式集,請呼叫 ClearProviders 并添加所需的日志記錄提供程式, 例如,以下代碼:
-
呼叫 ClearProviders 以從生成器中洗掉所有 ILoggerProvider 實體,
-
添加控制臺日志記錄提供程式,
-
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureLogging(logging => { logging.ClearProviders(); logging.AddConsole(); }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
使用第三方替代,以Nlog為例
修改 program.cs
-
using System; using NLog.Web; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Hosting; public static void Main(string[] args) { var logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger(); try { logger.Debug("init main"); CreateHostBuilder(args).Build().Run(); } catch (Exception exception) { //NLog: catch setup errors logger.Error(exception, "Stopped program because of exception"); throw; } finally { // Ensure to flush and stop internal timers/threads before application-exit (Avoid segmentation fault on Linux) NLog.LogManager.Shutdown(); } } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }) .ConfigureLogging(logging => { logging.ClearProviders(); logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace); }) .UseNLog(); // NLog: Setup NLog for Dependency injection
寫日志
-
using Microsoft.Extensions.Logging; public class HomeController : Controller { private readonly ILogger<HomeController> _logger; public HomeController(ILogger<HomeController> logger) { _logger = logger; _logger.LogDebug(1, "NLog injected into HomeController"); } public IActionResult Index() { _logger.LogInformation("Hello, this is the index!"); return View(); }
-
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/213498.html
標籤:.NET技术
上一篇:wpf 全域例外捕捉+錯誤日志記錄+自動創建桌面圖示
下一篇:c#應用中生成一個新應用并傳參
