为什么要使用.writeto.调试在Serilog LoggerConfiguration()? &g



在项目中,我正在工作的记录器是这样初始化的:

var logfile = String.Format($"logs/out_{Process.GetCurrentProcess().Id}_.log");
var config = new LoggerConfiguration()
//.Enrich.FromLogContext()
.MinimumLevel.Debug()
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.WriteTo.LoggerSink()
.WriteTo.File(logfile, rollingInterval: RollingInterval.Minute)
.WriteTo.Debug(outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}")
.WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}");
Log.Logger = config.CreateLogger();
Log.Logger.Information("Startup()");

导致行重复,因此

Log.Logger.Information("Startup()");

在搜索结果

[18:06:02 DBG] Startup()
[18:06:02 DBG] Startup()

出现在我的VS Code调试控制台。

但仅当附加了调试器时。

我发现这个问题可以通过删除

行来解决。
.WriteTo.Debug(outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}")

但这就是它的目的吗?

没有重复。Debug是一个单独的通道,它写入任何附加的调试器。如果没有附加的调试器,写入Debug的任何内容都将丢失。这样,如果没有监听,就不会有开销。大多数ide将写入Debug通道的内容显示在与控制台输出相同的窗口中。

在不调试的情况下运行应用程序时,只有写入Console的消息才会出现在控制台中。如果使用DebugView

这样的工具,可以在不附加调试器的情况下查看首次输出

相关内容

  • 没有找到相关文章

最新更新