无法使用 SerilogTraceListener 将 Trace.WriteLine 重定向到 Serilog

Can't redirect Trace.WriteLine to Serilog using SerilogTraceListener

在我的一个项目(.net core 3.1)中,我需要一种方法将 System.Diagnostics.Trace.WriteLine 重定向到 Serilog 文件。我找到了 SerilogTraceListener 包,它似乎是合适的人选。

不幸的是,直到现在,我还没有找到让它起作用的方法。

要复制它,
1) 创建.net 核心控制台项目
2) 添加以下 nuget 包:Serilog、SerilogTraceListener、Serilog.Sink.Console、Serilog.Sink.File
3) 用下面的

覆盖 Program class 代码
class Program
{
    static void Main(string[] args)
    {
        // Works fine
        Log.Logger = new LoggerConfiguration()
                       .WriteTo.Console()
                       .WriteTo.File("log.txt")
                       .CreateLogger();
        Log.Logger.Information("A string written using Logger.Information");

        // Trace is written in the console but not in the file
        Trace.Listeners.Add(new ConsoleTraceListener());
        Trace.Listeners.Add(new global::SerilogTraceListener.SerilogTraceListener());
        System.Diagnostics.Trace.WriteLine("A string written using Trace.WriteLine");
    }
}

我做错了什么?

TL;DR; 您需要将 MinimumLevel 设置为 DebugVerbose 才能看到 Trace.WriteLine 消息。


SerilogTraceListener maps System.Diagnostic.TraceEventType to Serilog.LogEventLevel, and when you call Trace.WriteLine, it maps these events to the Debug log event level.

这意味着 Serilog 的记录器正在接收类型为 LogEventLevel.Debug 的消息。

默认情况下在 Serilog 中配置的最低级别是 Information,这意味着 Debug 条消息被抑制。

您必须将 MinimumEventLevel 配置为 Debug(或 Verbose)才能看到 Trace.WriteLine 消息:

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Debug() // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    .WriteTo.Console()
    .WriteTo.File("log.txt")
    .CreateLogger();