Serilog 慢,性能差
Serilog slow, bad performance
是我做错了什么还是 Serilog 的性能很糟糕?
新建一个Asp.Net Core 5.0 webapi项目,添加对Serilog.AspNetCore nuget包的引用和下面的配置代码。 Serilogs 每个请求增加 15 毫秒!在我的加工中,在发布版本中从 5 毫秒跳到 20 毫秒。
Program.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
的日志记录库,我希望您能获得类似的性能。结果。
一种常见的模式是使用 Async
sink,并在后台线程上写入控制台。例如:
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.Enrich.FromLogContext()
.WriteTo.Async(writeTo => writeTo.Console()) // <<#<<#<<
.CreateLogger();
当然,从 Web 应用程序直接写入控制台通常不是最好的方法...There are much better Sinks you can use 直接定位到您将存储日志的位置。
是我做错了什么还是 Serilog 的性能很糟糕?
新建一个Asp.Net Core 5.0 webapi项目,添加对Serilog.AspNetCore nuget包的引用和下面的配置代码。 Serilogs 每个请求增加 15 毫秒!在我的加工中,在发布版本中从 5 毫秒跳到 20 毫秒。
Program.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
的日志记录库,我希望您能获得类似的性能。结果。
一种常见的模式是使用 Async
sink,并在后台线程上写入控制台。例如:
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.Enrich.FromLogContext()
.WriteTo.Async(writeTo => writeTo.Console()) // <<#<<#<<
.CreateLogger();
当然,从 Web 应用程序直接写入控制台通常不是最好的方法...There are much better Sinks you can use 直接定位到您将存储日志的位置。