c# - 为什么在 Serilog LoggerConfiguration() 中使用 .WriteTo.Debug?
问题描述
在我正在研究的项目中,记录器的初始化如下:
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
都会丢失。这样,如果没有人在听,就没有开销。Debug
大多数 IDE在用于控制台输出的同一窗口中显示写入通道的任何内容。
当您在没有调试的情况下运行应用程序时,只有写入的消息Console
才会出现在控制台中。如果您使用像DebugView这样的工具,您可以在不附加调试器的情况下查看首次亮相的输出
推荐阅读
- delphi - 复制时如何保留控件之间的连接?
- django - Django UpdateView 用户验证不起作用
- elasticsearch - 动态设置fluentD弹性搜索索引
- xml - 如何在使用 STRIP_OUTER_ELEMENT = TRUE 时获取大型 xml 雪花中的 xml 标头标记数据
- java - 父抽象类的构造
- kubernetes - kubectl 允许用户只复制文件进出 pod
- c# - 查找字符串中最常见的 5 个单词
- javascript - AnchorEL组件在第一次调用方法后失效
- r - data.table 性能问题:get vs [[]],就地计算
- python-3.x - 如何从列表中随机选择项目随机时间