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=https://www.cnblogs.com/wangwangwangMax/archive/2020/12/02/"../../../log\log.txt" /> <!--追加日志內容--> <appendToFile value=https://www.cnblogs.com/wangwangwangMax/archive/2020/12/02/"true" /> <!--防止多執行緒時不能寫Log,官方說執行緒非安全--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <!--可以為:Once|Size|Date|Composite--> <!--Composite為Size和Date的組合--> <rollingStyle value=https://www.cnblogs.com/wangwangwangMax/archive/2020/12/02/"Composite" /> <!--當備份檔案時,為檔案名加的后綴--> <datePattern value=https://www.cnblogs.com/wangwangwangMax/archive/2020/12/02/"yyyyMMdd.TXT" /> <!--日志最大個數,都是最新的--> <!--rollingStyle節點為Size時,只能有value個日志--> <!--rollingStyle節點為Composite時,每天有value個日志--> <maxSizeRollBackups value=https://www.cnblogs.com/wangwangwangMax/archive/2020/12/02/"20" /> <!--可用的單位:KB|MB|GB--> <maximumFileSize value=https://www.cnblogs.com/wangwangwangMax/archive/2020/12/02/"3MB" /> <!--置為true,當前最新日志檔案名永遠為file節中的名字--> <staticLogFileName value=https://www.cnblogs.com/wangwangwangMax/archive/2020/12/02/"true" /> <!--輸出級別在INFO和ERROR之間的日志--> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value=https://www.cnblogs.com/wangwangwangMax/archive/2020/12/02/"ALL" /> <param name="LevelMax" value=https://www.cnblogs.com/wangwangwangMax/archive/2020/12/02/"FATAL" /> </filter> <!--必須結合起來用,第一個只過濾出WARN,第二個拒絕其它其它日志輸出--> <!-- <filter type="log4net.Filter.LevelMatchFilter"> <param name="LevelToMatch" value=https://www.cnblogs.com/wangwangwangMax/archive/2020/12/02/"WARN" /> </filter> <filter type="log4net.Filter.DenyAllFilter" />--> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value=https://www.cnblogs.com/wangwangwangMax/archive/2020/12/02/"%date [%thread] %-5level %logger - %message%newline"/> </layout> </appender> <!-- levels: OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL --> <root> <priority value=https://www.cnblogs.com/wangwangwangMax/archive/2020/12/02/"ALL"/> <level value=https://www.cnblogs.com/wangwangwangMax/archive/2020/12/02/"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(); } }
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/228682.html
標籤:.NET技术
