在项目中,我正在工作的记录器是这样初始化的:
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