如何使用第三方日志記錄提供程序替代.NET Core中的內(nèi)置程序

背景
.NET Core 支持適用于各種內(nèi)置和第三方日志記錄提供程序的日志記錄 API。 先來看下如何將日志記錄 API 與內(nèi)置提供程序一起使用。
調(diào)用 CreateDefaultBuilder,這將添加以下日志記錄提供程序:
控制臺(tái)
調(diào)試
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>();});}
實(shí)現(xiàn)思路
若要替代Host.CreateDefaultBuilder 添加的默認(rèn)日志記錄提供程序集,請調(diào)用 ClearProviders 并添加所需的日志記錄提供程序。 例如,以下代碼:
調(diào)用 ClearProviders 以從生成器中刪除所有 ILoggerProvider 實(shí)例。
添加控制臺(tái)日志記錄提供程序。
public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureLogging(logging =>{logging.ClearProviders();logging.AddConsole();}).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>();});
Nlog案例
使用第三方替代,以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 errorslogger.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();}
【推薦】.NET Core開發(fā)實(shí)戰(zhàn)視頻課程 ★★★
.NET Core實(shí)戰(zhàn)項(xiàng)目之CMS 第一章 入門篇-開篇及總體規(guī)劃
【.NET Core微服務(wù)實(shí)戰(zhàn)-統(tǒng)一身份認(rèn)證】開篇及目錄索引
Redis基本使用及百億數(shù)據(jù)量中的使用技巧分享(附視頻地址及觀看指南)
.NET Core中的一個(gè)接口多種實(shí)現(xiàn)的依賴注入與動(dòng)態(tài)選擇看這篇就夠了
10個(gè)小技巧助您寫出高性能的ASP.NET Core代碼
用abp vNext快速開發(fā)Quartz.NET定時(shí)任務(wù)管理界面
在ASP.NET Core中創(chuàng)建基于Quartz.NET托管服務(wù)輕松實(shí)現(xiàn)作業(yè)調(diào)度
現(xiàn)身說法:實(shí)際業(yè)務(wù)出發(fā)分析百億數(shù)據(jù)量下的多表查詢優(yōu)化
