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

C#控制台应用使用Serilog无日志输出问题排查

Serilog配置文件失效无日志输出的常见原因

1. 配置文件未复制到输出目录

检查logSettings.json的属性:右键文件→属性→复制到输出目录,设置为始终复制或如果较新则复制。如果文件没被同步到程序运行目录,Serilog找不到配置,会默认静默不输出日志(这是Serilog的容错机制,不会抛出错误)。

2. 配置文件格式或节点不符合Serilog要求

确保JSON结构符合Serilog的规范,根节点必须是Serilog,核心节点如MinimumLevel、WriteTo不能写错。示例正确结构:

{
  "Serilog": {
    "MinimumLevel": {
      "Default": "Warning",
      "Override": {
        "Microsoft": "Error",
        "System": "Error"
      }
    },
    "WriteTo": [
      { "Name": "Console" },
      {
        "Name": "File",
        "Args": {
          "path": "Logs/log-.txt",
          "rollingInterval": "Day"
        }
      }
    ]
  }
}

注意节点名称大小写敏感,比如把MinimumLevel写成minimumLevel会被Serilog忽略。

3. 自定义MyLoggerFactory未正确加载配置

检查配置加载代码,必须用Serilog的ReadFrom.Configuration()方法绑定配置。示例正确的初始化逻辑:

var config = new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("logSettings.json")
    .Build();

Log.Logger = new LoggerConfiguration()
    .ReadFrom.Configuration(config)
    .CreateLogger();

如果自定义工厂里没有正确完成这段绑定,Serilog会使用默认的空配置,自然没有日志输出。

4. 日志级别配置过高

检查MinimumLevel.Default是否设为Error或Fatal,这种情况下LogWarning的日志级别低于阈值,不会被输出。另外要确认是否有程序集级别的Override设置,比如把当前项目的日志级别强制设为Error,覆盖了默认的Warning。

5. 未完成Serilog初始化或未刷新日志

控制台应用启动时必须初始化Serilog,并且在程序退出前调用Log.CloseAndFlush()——文件Sink会缓冲日志,不调用此方法的话,程序退出时缓冲的日志会丢失。另外要确认自定义工厂是否正确替换了默认日志提供者,避免代码实际使用的是默认空日志器而非Serilog实例。


内容的提问来源于stack exchange,提问作者Daviid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 05:03:15