.NET5控制台应用Serilog控制台日志重复输出、文件日志正常问题求助
问题原因
- 核心原因是Serilog的Console输出 sink 被重复注册了两次:
- 你在
appsettings.json的Serilog配置节点WriteTo数组里已经配置了Consolesink - 同时你在代码构造
LoggerConfiguration的时候,又手动加了.WriteTo.Console()的配置
两个Console sink都会输出日志到同一个控制台窗口,所以所有日志都会打印两次。
- 你在
- 为什么日志文件没有重复?
你代码里手动加的.WriteTo.File(logFilepath, rollingInterval: RollingInterval.Day)和配置文件里的File sink路径完全不同,两个sink输出到不同的日志文件,你只查看了logFilepath对应的文件,自然看不到重复内容。同理你的Seq服务实际上也会收到重复的日志,只是你没注意到。
修复方案
两种方案二选一即可:
方案1:全配置文件管理Serilog规则
删掉代码里构造LoggerConfiguration时手动加的三个WriteTo配置,仅保留从配置文件读取的逻辑:
Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(builder.Build()) .Enrich.FromLogContext() // 删掉下面三行重复的sink配置 // .WriteTo.Console() // .WriteTo.Seq("https://localhost:5341/") // .WriteTo.File(logFilepath, rollingInterval: RollingInterval.Day) .CreateLogger();
如果需要动态指定日志文件路径,可以提前把路径写入配置对象再加载,或者用Serilog的环境变量占位符实现。
方案2:全代码管理sink配置
删掉appsettings.json里Serilog节点下的WriteTo数组中的Console、Seq、File三个配置项,仅保留代码里的sink注册逻辑即可。
内容的提问来源于stack exchange,提问作者dinotom
相关产品推荐
相关产品推荐

