.net core中的那些常用的日志框架(Logging篇)


前言

日志,在我們每個項目中是必不可少的,它不僅能在調試的時候測試數據,而且在項目上線,也是我們排查錯誤的得力助手,那我就能談談,用的多的幾個日志框架吧!如果有不對的地方,歡迎來指教錯誤,謝謝!

Asp.Net Core日志中Logging篇

一看這個名字,大家也能猜到,這是微軟自帶的一個日志框架。

1.1引用

創建ASP.NET Core程序,程序會自帶Microsoft.Extensions.Logging,如果沒有,請在Nuget安裝

1.2Program配置講解

 public class Program
    {
        public static void Main(string[] args)
        {
            var host = CreateHostBuilder(args).Build();
            //獲取日志服務(在Program作用域類)
            var logger = host.Services.GetRequiredService<ILogger<Program>>();
            logger.LogInformation("Start");
            host.Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration(config=> {
                   //讀取Json配置文件(讀取日志的配置,這是設置為熱更新)
                config.AddJsonFile("appsettings.json",optional:false,reloadOnChange:true);
               }).ConfigureLogging(log=> {
                   //日志添加到控制台
                   log.AddConsole();
                   //日志添加到debug調試窗口
                   log.AddDebug();
               })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
  • host.Services.GetRequiredService<ILogger >(): 獲取當前作用域的日志對象
  • config.AddJsonFile("appsettings.json",optional:false,reloadOnChange:true):加載配置文件(下圖的配置文件),設置為熱更新
  • log.AddConsole():日志添加到控制台
  • log.AddDebug():日志添加到debug調試窗口

1.3配置文件

在你項目中,找到appsetting.json文件,打開后,如下圖:

{
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information",
    }
  },

    "AllowedHosts": "*"
  }

你肯定會很疑惑,這些配置是什么意思,為啥要這樣寫?

appsetting.json是一個配置文件,我們很多配置信息,都可以寫到這個文件中來,日志的配置也是如此。

Logging:是日志配置的默認名稱,如果想自定義,也是可以,后面會演示
LogLevel:日志級別(日志的輸出是有輸出級,如下圖所示)
Default:默認級別
Microsoft:系統級別
Microsoft.Hosting.Lifetime:生命周期
    public enum LogLevel
    {
        //應用程序數據。 這些消息默認情況下處於禁用狀態,並且永遠不應在生產環境中啟用。
        Trace,
        //在開發過程中用於交互式調查的日志。 這些日志應該主要包含對調試有用的信息,並且沒有長期的信息
        Debug,
        //跟蹤應用程序一般流程的日志。 這些日志應具有長期
        Information,
        //在應用程序流中突出顯示異常或意外事件的日志,但不會導致應用程序執行停止。
        Warning,
        //突出顯示由於故障而停止當前執行流的日志。這些應表明當前活動失敗,而不是整個應用程序范圍內的失敗。
        Error,
        //描述不可恢復的應用程序或系統崩潰或災難性事件的日志,必須立即引起注意的故障。
        Critical,
        //不用於編寫日志消息。 指定不應將日志記錄類別
        None
    }

優先等級從上到下遞減Trace<Debug<Information<Warning<Error<Critical<None

1.4如何封裝自己定義的日志結構?

我們可以新建一個類LoggerHelper,然后把ILogger接口的中定義的方法都實現一遍,可以自己加時間,加條件過濾等。把系統的日志框架,自己套一個殼,然后封裝起來,然后就可以為所欲為了。

  /// <summary>
    /// 日志輔助類
    /// </summary>
public class LoggerHelper
    {
        ILogger<LoggerHelper> _logger;
        public LoggerHelper(ILogger<LoggerHelper> logger)
        {
            _logger = logger;
        }

        public void LogInformation(string msg)
        {
            _logger.LogInformation(Write(msg));
        }
        public void LogDebug(string msg)
        {
            _logger.LogDebug(Write(msg));
        }
        public void LogError(string msg)
        { 
            _logger.LogError(Write(msg));
        }
        public void LogWarning(string msg)
        {
            _logger.LogWarning(Write(msg));
        }

        protected string Write(string msg)
        {
            return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":" + msg;
        }
    }

第一步:注入服務

    public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
            services.AddTransient<LoggerHelper>();
        }

第二步:添加構造函數

private readonly LoggerHelper _logger;

        public WeatherForecastController(LoggerHelper logger)
        {
            _logger = logger;
        }

第三步:調用服務

       _logger.LogInformation("LogInformation"+Guid.NewGuid().ToString("N"));
                _logger.LogDebug("LogDebug" + Guid.NewGuid().ToString("N"));
                _logger.LogWarning("LogWarning" + Guid.NewGuid().ToString("N"));
                _logger.LogError("LogError" + Guid.NewGuid().ToString("N"));

第四步:配置日志級別

  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information",
       "LoggerHelper": "Information"
    },
    "Console": {
      "IncludeScopes": true
    }
  },

第五步:效果展示

看到這里是不是有疑問?

  • "IncludeScopes": true是什么意思?
    答:記錄日志的 scope 信息, 對於 DeveloperExceptionPageMiddleware ,會在日志中記錄 ConnectionId, RequestId, RequestPath。
  • "LoggerHelper": "Information"是什么意思?
    答:LoggerHelper就是我們自定義類,設置我們自己封裝日志的日志級別
  • 怎么理解日志中的信息?
info: Microsoft.Hosting.Lifetime[0]
      Now listening on: http://localhost:5000

答:info:日志級別;Microsoft.Hosting.Lifetime[0]:日志作用域;Now listening on: http://localhost:5000日志內容

總結:

可能我這篇博客,還是比較淺顯的,沒有深入的介紹日志中不同作用域的日志級別,只是以我的角度,給大家講解一下Asp.Net Core中的系統自帶的日志框架的使用,以及如何封裝一個自己一個類,特殊處理日志信息。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM