不能使用SerilogTraceListener将Trace.WriteLine重定向到Serilog。

问题描述 投票:1回答:1

在我的一个项目(.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 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");
    }
}

我做错了什么?

trace serilog
1个回答
0
投票

TL;DR; 你需要设置 MinimumLevelDebugVerbose 为了看到 Trace.WriteLine 消息。


SerilogTraceListener 地图 System.Diagnostic.TraceEventTypeSerilog.LogEventLevel而当你打电话 Trace.WriteLine, 它将这些事件映射到 Debug 事件记录级.

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

在Serilog中默认配置的最小级别是 Information这意味着 Debug 消息被抑制。

你必须配置 MinimumEventLevelDebug (或 Verbose),以便查看 Trace.WriteLine 信息。

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Debug() // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    .WriteTo.Console()
    .WriteTo.File("log.txt")
    .CreateLogger();
© www.soinside.com 2019 - 2024. All rights reserved.