Core的學習二:【四步完成】.Net Core中Log4net的使用,配置,【框架.NET5】

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();
                })
            ;
    }

須要引入命名空間:web

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日誌記錄
            {
                //一、Trace
                //用於記錄最詳細的日誌消息,一般用於開發階段調試問題。
                //由於這些消息可能包含敏感的應用程序數據,所以不建議用於生產環境,默認應禁用。

                //二、Debug
                //這種消息在開發階段短時間內比較有用。
                //它們包含一些可能會對調試有所助益、但沒有長期價值的信息。
                //默認狀況下這是最詳細的日誌。

                //三、Information
                //這種消息被用於跟蹤應用程序的通常流程。
                //這種日誌有必定的長期價值。

                //四、Warning
                //當應用程序出現錯誤或其餘不會致使程序中止的流程異常或意外事件時,應使用警告級別,,以供往後調查。
                //建議在一個通用的地方處理警告級別的異常。

                //五、Error
                //當應用程序因爲某些故障中止工做時,則須要記錄錯誤日誌。
                //這些消息應該指明當前活動或操做(好比當前的HTTP請求),而不是應用程序範圍的故障。

                //六、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();
        }
    }
相關文章
相關標籤/搜索