1.需要引進NoGet程序包【log4net,還有擴展程序集:Microsoft.Extensions.Logging.Log4Net.AspNetCore】 
2.把引入的程序集使用進來:
public class Program { public static void Main(string[] args) { CreateHostBuilder(args) .Build() .Run(); } /// <summary> /// 調入當前方法,CreateHostBuilder->然后進入 Startup 這個類 /// </summary> public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }) //把前面我們引入的程序集使用進來 .ConfigureLogging((context, LoggingBuilder) => { LoggingBuilder.AddFilter("System", LogLevel.Warning); // 忽略系統的其他日志 LoggingBuilder.AddFilter("Microsoft", LogLevel.Warning); LoggingBuilder.AddLog4Net(); }) ; }
需要引入命名空間:
using Microsoft.Extensions.Logging;
3. 新增日志配置文件,跟Startup.cs 同級,並設置屬性-為【始終復制】

<?xml version="1.0" encoding="utf-8"?> <log4net> <!-- Define some output appenders --> <appender name="rollingAppender" type="log4net.Appender.RollingFileAppender"> <!--日志文件路徑--> <file value="../../../log\log.txt" /> <!--追加日志內容--> <appendToFile value="true" /> <!--防止多線程時不能寫Log,官方說線程非安全--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <!--可以為:Once|Size|Date|Composite--> <!--Composite為Size和Date的組合--> <rollingStyle value="Composite" /> <!--當備份文件時,為文件名加的后綴--> <datePattern value="yyyyMMdd.TXT" /> <!--日志最大個數,都是最新的--> <!--rollingStyle節點為Size時,只能有value個日志--> <!--rollingStyle節點為Composite時,每天有value個日志--> <maxSizeRollBackups value="20" /> <!--可用的單位:KB|MB|GB--> <maximumFileSize value="3MB" /> <!--置為true,當前最新日志文件名永遠為file節中的名字--> <staticLogFileName value="true" /> <!--輸出級別在INFO和ERROR之間的日志--> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="ALL" /> <param name="LevelMax" value="FATAL" /> </filter> <!--必須結合起來用,第一個只過濾出WARN,第二個拒絕其它其它日志輸出--> <!-- <filter type="log4net.Filter.LevelMatchFilter"> <param name="LevelToMatch" value="WARN" /> </filter> <filter type="log4net.Filter.DenyAllFilter" />--> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/> </layout> </appender> <!-- levels: OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL --> <root> <priority value="ALL"/> <level value="ALL"/> <appender-ref ref="rollingAppender" /> </root> </log4net>
4.【Startup類】Configure里面注入ILoggerFactory,創建ILogger對象【需要引入上面提到的命名空間】
public void Configure(IApplicationBuilder app, IWebHostEnvironment env,ILoggerFactory factory) { ILogger<Startup> _ilogger = factory.CreateLogger<Startup>(); //寫日志 _ilogger.LogError("This is StartUp Error!"); }
上面是在Startup類中寫日志,當然我們也可以在控制器中寫日志
public class SecondController : Controller { //2.指定當前類型的變量 private ILoggerFactory _iFactory = null; private ILogger<SecondController> _ilogger = null; //構造函數注入 public SecondController(ILoggerFactory factory, ILogger<SecondController> logger) { //注入當前的實例 _iFactory = factory; _ilogger = logger; } /// <summary> /// log4net在控制器中的使用 /// </summary> /// <returns></returns> public IActionResult Index() { #region Log4net日志記錄 { //1、Trace //用於記錄最詳細的日志消息,通常用於開發階段調試問題。 //因為這些消息可能包含敏感的應用程序數據,因此不建議用於生產環境,默認應禁用。 //2、Debug //這種消息在開發階段短期內比較有用。 //它們包含一些可能會對調試有所助益、但沒有長期價值的信息。 //默認情況下這是最詳細的日志。 //3、Information //這種消息被用於跟蹤應用程序的一般流程。 //這種日志有一定的長期價值。 //4、Warning //當應用程序出現錯誤或其他不會導致程序停止的流程異常或意外事件時,應使用警告級別,,以供日后調查。 //建議在一個通用的地方處理警告級別的異常。 //5、Error //當應用程序由於某些故障停止工作時,則需要記錄錯誤日志。 //這些消息應該指明當前活動或操作(比如當前的HTTP請求),而不是應用程序范圍的故障。 //6、Critical //當應用程序或系統崩潰、遇到災難性故障,需要立即被關注時,應當記錄關鍵級別的日志。例如,數據丟失、磁盤空間不夠等 //方式一: //創建當前logger var iFactoryLogger = _iFactory.CreateLogger<SecondController>(); //寫日志 iFactoryLogger.LogInformation("This's SecondController_iFactoryLogger.LogInformation-Information");//方式二:使用_ilogger寫日志 _ilogger.LogError("This's SecondController__ilogger.LogError_Error"); } #endregion return View(); } }