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

求助:Serilog配置后无法写入指定文件路径Logs/Error/applog.log

日志未写入指定路径的原因及修复方案

1. 第一版配置的结构与用法完全错误

第一版配置把WriteTo直接放在JSON根节点,而Serilog通过ReadFrom.Configuration读取配置时,默认只会识别根节点下的Serilog节点(ASP.NET Core项目则是Logging:Serilog节点),根节点直接写WriteTo不会被解析。

另外你嵌套用configureLogger添加File sink的写法也不对,configureLogger是用来配置子记录器(比如针对特定日志上下文的独立logger),不是用来追加sink的,这种写法根本不会生效。再加上第一个File sink没有任何Args参数,等于完全没配置有效输出路径,自然不会生成日志。

2. 第二版配置的读取逻辑有遗漏

第二版配置是标准的ASP.NET Core风格(放在Logging:Serilog下),但你的代码直接读取appsettings.json后传给Serilog,默认情况下Serilog会优先读取根节点的Serilog配置,而非Logging:Serilog。要让它读取这个节点,得手动指定配置路径:

var Logger = new LoggerConfiguration()
  .ReadFrom.Configuration(configuration, sectionName: "Logging:Serilog")
  .CreateLogger();

3. 可能存在的其他问题

  • 日志级别过滤:第二版配置里的Logging:LogLevel是ASP.NET Core的日志过滤,Serilog自身的级别过滤需要在Serilog配置里加MinimumLevel节点,比如:
    "Serilog": {
      "MinimumLevel": {
        "Default": "Information"
      },
      "WriteTo": [/* 你的File配置 */]
    }
    
    不过你输出的是Information级别,大概率不会被过滤,但还是要确认配置是否覆盖了级别。
  • 权限与目录问题:确保程序有写入Logs/Error目录的权限,Serilog会自动创建不存在的目录,但权限不足会静默失败。
  • NuGet包缺失:必须安装Serilog.Sinks.File和Serilog.Settings.Configuration这两个包,缺少的话File sink根本不会生效。

标准配置示例(推荐)

直接在根节点定义Serilog配置,这样代码无需额外指定section:

{
  "Serilog": {
    "MinimumLevel": {
      "Default": "Information"
    },
    "WriteTo": [
      {
        "Name": "File",
        "Args": {
          "path": "Logs/Error/applog.log",
          "outputTemplate": "{Timestamp:o} [Thread:{ThreadId}] [{Level:u3}] ({SourceContext}) {Message}{NewLine}{Exception}",
          "rollingInterval": "Day",
          "retainedFileCountLimit": 7
        }
      }
    ]
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "HrSoultion": "server=.;database=Maqta;Trusted_Connection=True;MultipleActiveResultSets=true;TrustServerCertificate=True"
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:55:18