Asp.net-Core

Serilog 速度慢,性能差

  • March 9, 2021

我做錯了什麼還是 Serilog 的性能很差?

創建一個新的 Asp.Net Core 5.0 webapi 項目,添加對 Serilog.AspNetCore nuget 包的引用和以下配置程式碼。Serilogs 每個請求增加 15 毫秒!在我的發布版本中,我的機加工時間從 5 毫秒跳到了 20 毫秒。

程序.cs

public class Program
{
   public static void Main(string[] args)
   {
       Log.Logger = new LoggerConfiguration()
           .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
           .Enrich.FromLogContext()
           .WriteTo.Console()
           .CreateLogger();

       CreateHostBuilder(args).Build().Run();
   }

   public static IHostBuilder CreateHostBuilder(string[] args) =>
       Host.CreateDefaultBuilder(args)
           .UseSerilog()
           .ConfigureWebHostDefaults(webBuilder =>
           {
               webBuilder.UseStartup<Startup>();
           });
}

性能損失可能不是 Serilog 本身,而是您將所有日誌同步寫入控制台這一事實,這會阻塞請求執行緒並對性能產生一些影響。

如果您使用任何其他最終呼叫的日誌庫,Console.WriteLine我希望您能獲得類似的性能。結果。

一種常見的模式是使用Asyncsink,並在後台執行緒上寫入 Console。例如:

Log.Logger = new LoggerConfiguration()
   .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
   .Enrich.FromLogContext()
   .WriteTo.Async(writeTo => writeTo.Console()) // <<#<<#<<
   .CreateLogger();

當然,從 Web 應用程序直接寫入控制台通常不是最好的方法……您可以使用更好的接收器來直接定位您將儲存日誌的位置。

引用自:https://stackoverflow.com/questions/66550026