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

Docker容器中ASP.NET Core 6 Web API日志无法被Seq捕获的配置问题

问题:Docker中ASP.NET Core 6 Web API的Seq日志接收配置问题

我有一个运行在Docker容器中的ASP.NET Core 6 Web API应用,该应用使用Serilog和Seq日志组件。目前遇到Seq无法捕获应用日志的问题,查阅资料后尝试安装并运行基于UDP端口的seq-input-gelf容器插件,但仅能看到“Collected GELF server metrics”日志,无应用日志输出。请问该如何配置Seq以接收应用日志?

应用配置(appsettings.json)

"Serilog": {
    "Using": [ "Serilog.Exceptions", "Serilog", "Serilog.Sinks.Console", "Serilog.Sinks.Seq" ],
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Warning",
        "Microsoft.Hosting.Lifetime": "Information"
      }
    },
    "WriteTo": [
      {
        "Name": "Seq",
        "Args": {
          "serverUrl": "http://localhost:5341",
          "apiKey": "none",
          "restrictedMinimumLevel": "Verbose",
          "rollingInterval": "Day"
        }
      }
    ]
  },

容器相关截图

运行中的容器列表
Seq容器详情
seq-input-gelf容器日志


解决方案

1. 修复容器间网络访问问题

Docker容器内的localhost指向容器自身,而非宿主机的Seq服务,这是核心问题:

  • 若使用Docker Compose部署,直接用Seq服务的名称作为地址,例如http://seq:5341
  • 若单独运行容器,将ASP.NET容器加入Seq所在的Docker网络,或替换localhost为宿主机的实际IP(如http://192.168.1.100:5341)

2. 移除无关的GELF插件

你当前使用Serilog.Sinks.Seq直接向Seq发送日志,不需要seq-input-gelf插件(该插件用于接收GELF格式的第三方日志),停止并移除该插件容器即可,避免混淆日志流。

3. 修正Serilog配置错误

Seq Sink不支持rollingInterval参数(该参数属于文件输出Sink),删除该配置项,修正后的Serilog配置如下:

"Serilog": {
    "Using": [ "Serilog.Exceptions", "Serilog", "Serilog.Sinks.Console", "Serilog.Sinks.Seq" ],
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Warning",
        "Microsoft.Hosting.Lifetime": "Information"
      }
    },
    "WriteTo": [
      {
        "Name": "Seq",
        "Args": {
          "serverUrl": "http://seq:5341", // 替换为正确的Seq地址
          "apiKey": "", // 若未设置API密钥可留空或删除该参数
          "restrictedMinimumLevel": "Verbose"
        }
      },
      {
        "Name": "Console" // 临时添加控制台输出,验证日志是否生成
      }
    ]
  },

4. 验证Seq服务连通性

在ASP.NET容器内部执行命令,测试Seq服务是否可达:

curl http://seq:5341/health

返回200状态码表示网络连通正常,若不通则检查容器网络配置(如是否在同一网络、端口映射是否正确)。

5. 确认NuGet包安装

确保项目已正确安装Serilog.Sinks.Seq NuGet包,版本需与.NET 6兼容,可通过以下命令安装:

dotnet add package Serilog.Sinks.Seq --version 5.2.0

内容的提问来源于stack exchange,提问作者Varga Máté

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 04:57:18