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

SbC*_*nts 6 trace serilog

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

不幸的是,到目前为止,我还没有找到让它发挥作用的方法。

要重现它,
1)创建一个.net core控制台项目
2)添加以下nuget包:Serilog,SerilogTraceListener,Serilog.Sink.Console,Serilog.Sink.File
3)通过以下内容覆盖Program类代码

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Cai*_*ete 6

TL;博士; 您需要将 或 设置MinimumLevelDebug才能Verbose查看Trace.WriteLine消息。


SerilogTraceListener映射System.Diagnostic.TraceEventTypeSerilog.LogEventLevel,当您调用时Trace.WriteLine它会将这些事件映射到Debug日志事件级别

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

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

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

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