You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET5控制台应用Serilog控制台日志重复输出、文件日志正常问题求助

问题原因
  • 核心原因是Serilog的Console输出 sink 被重复注册了两次:
    1. 你在appsettings.json的Serilog配置节点WriteTo数组里已经配置了Console sink
    2. 同时你在代码构造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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 07:03:03