重新整理 .net core 實踐篇—————日志系統之作用域[十七]


前言

前面介紹了服務與日志之間的配置,那么我們服務會遇到下面的場景會被遇到一些打log的問題。

前面我提及到我們的log,其實是在一個隊列里面,而我們的請求是在並發的,多個用戶同時發送請求這個時候我們的日志是錯亂的。

如果有一個錯誤,那么我們只能過知道這個錯誤是哪里報錯了,但是我們不知道觸發的流程是什么樣的,這對我們的debug不友好。

那么我們這時候就可以設置日志作用域。

正文

日志作用域適合下面的場景:

  1. 事務 因為一個事務有多個操作,那么希望這些操作能夠有一個標識符,能夠展示某一次事務的完整log

  2. 復雜的工作流相關的東西,記錄一個工作流的具體過程

  3. 請求處理過程,就是上面所說的多個用戶同時請求的日志錯亂的問題,常用哈。

配置

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

測試代碼:

class Program
{
	static void Main(string[] args)
	{
		IConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
		configurationBuilder.AddJsonFile("appsettings.json",optional:false,reloadOnChange:true);
		var config = configurationBuilder.Build();

		IServiceCollection serviceCollection = new ServiceCollection();
		serviceCollection.AddSingleton<IConfiguration>(p=>config);
		serviceCollection.AddLogging(builder =>
		{
			builder.AddConfiguration(config.GetSection("Logging"));
			builder.AddConsole();
		});

		IServiceProvider service = serviceCollection.BuildServiceProvider();

		var logger = service.GetService<ILogger<Program>>();

		using (logger.BeginScope("Current ScopeId:{scopeId}", Guid.NewGuid()))
		{
			logger.LogInformation("I am info.");
			logger.LogWarning("I am Warning");
			logger.LogError("I am Error");
		}

		Console.ReadKey();
	}
}

結果:

設置IncludeScopes 為true 即可。

而在asp .net core項目中只要設置IncludeScopes 為true,對於每個請求,都是在同一個作用域內,故而ILogger打印的都會加上同一個一個唯一標識。

這里就不要演示了,在細節篇中會寫入這個作用域如何實現的,東西比較多,就不放在實踐篇了。

上述為個人整理,如有錯誤,望請指出。這一節寫的比較少吧,因為在細節篇里面會詳細介紹實現,而我們實踐開發過程中只需要知道如何開啟即可。

下一節:結構化日志


免責聲明!

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



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