Asp.net-Core
Serilog 速度慢,性能差
我做錯了什麼還是 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 應用程序直接寫入控制台通常不是最好的方法……您可以使用更好的接收器來直接定位您將儲存日誌的位置。