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" } } ] },
容器相关截图



解决方案
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é
相关产品推荐
相关产品推荐

