在我的一个项目(.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)
我究竟做错了什么?
TL;博士; 您需要将 或 设置MinimumLevel为Debug才能Verbose查看Trace.WriteLine消息。
SerilogTraceListener映射System.Diagnostic.TraceEventType到Serilog.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)
| 归档时间: |
|
| 查看次数: |
1772 次 |
| 最近记录: |