无法使用 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
设置为 Debug
或 Verbose
才能看到 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();
在我的一个项目(.net core 3.1)中,我需要一种方法将 System.Diagnostics.Trace.WriteLine 重定向到 Serilog 文件。我找到了 SerilogTraceListener 包,它似乎是合适的人选。
不幸的是,直到现在,我还没有找到让它起作用的方法。
要复制它,
1) 创建.net 核心控制台项目
2) 添加以下 nuget 包:Serilog、SerilogTraceListener、Serilog.Sink.Console、Serilog.Sink.File
3) 用下面的
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
设置为 Debug
或 Verbose
才能看到 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();