Logger-Meldung + Serilog = Leistungsprobleme?
Posted: 03 Jan 2025, 17:46
Wie von Microsoft vorgeschlagen, habe ich versucht, ihren Hochleistungsprotokollierungsansatz (auch als LoggerMessage-Muster bekannt) mit dem Serilog-Logger zu verwenden. Aus irgendeinem Grund brachte es keine Leistungssteigerung, sondern führte ganz im Gegenteil zu einer schlechteren Leistung. Betrachten Sie den folgenden Benchmark:
Ergebnisse sind wie folgt:

„Hochleistungsprotokollierung“ hat mich also mit 50 % mehr Speicherzuweisung und 25 % schlechterer Leistung belohnt.
Könnte Bitte hilft mir jemand zu verstehen, was hier falsch sein könnte Wie kann eine Leistungssteigerung erzielt werden, wenn Logger-Nachrichten mit Serilog als Logger verwendet werden?
Code: Select all
[MemoryDiagnoser]
public class SerilogBenchmark
{
private static readonly ILogger Logger;
private static readonly string LogStringTemplate = "User {Username} {Email} has logged in.";
private static Action LoggerAction =
LoggerMessage.Define(
LogLevel.Information,
new EventId(1, "Login"),
LogStringTemplate);
static SerilogBenchmark()
{
var services = new ServiceCollection();
Log.Logger = new LoggerConfiguration()
.WriteTo.TextWriter(TextWriter.Null)
.CreateLogger();
services.AddLogging(builder =>
{
builder.ClearProviders();
builder.AddSerilog(dispose: true);
});
var serviceProvider = services.BuildServiceProvider();
Logger = serviceProvider.GetRequiredService();
}
[Benchmark]
public void TestLogExtension()
{
Logger.LogInformation(LogStringTemplate, "User", "foo@bar.com");
}
[Benchmark]
public void TestLogAction()
{
LoggerAction(Logger, "User", "foo@bar.com", null);
}
}

„Hochleistungsprotokollierung“ hat mich also mit 50 % mehr Speicherzuweisung und 25 % schlechterer Leistung belohnt.
Könnte Bitte hilft mir jemand zu verstehen, was hier falsch sein könnte Wie kann eine Leistungssteigerung erzielt werden, wenn Logger-Nachrichten mit Serilog als Logger verwendet werden?