serilog日志必须配置writeto.seq()、占位符与参数严格匹配、正确设置apikey,否则日志无法进入seq或字段为空;结构化字段依赖占位符命名规范,多环境需分层配置seq地址与认证。

Serilog 必须配 WriteTo.Seq(),否则日志根本不会发到 Seq;光写 Log.Information 不够,还得确保占位符和参数严格匹配,否则字段在 Seq 里为空或显示为文本。
为什么日志没进 Seq?检查这三个硬性条件
Seq 不是“自动接收日志”的服务,它只收符合结构化协议的 HTTP 请求。Serilog 要把日志推过去,必须同时满足:
-
WriteTo.Seq("http://localhost:5341")这一行得出现在LoggerConfiguration中,且 URL 可达(本地默认端口是5341) - 不能只用
Log.Logger = new LoggerConfiguration().CreateLogger()就完事——必须在builder.Build()前完成赋值,否则 ASP.NET Core 启动阶段的异常日志就丢了 - 别漏掉
apiKey:如果 Seq 启用了认证(生产环境强烈建议开启),WriteTo.Seq(..., apiKey: "xxx")缺一不可,否则请求直接被拒绝,日志静默失败
Log.Information 写进去,但 Seq 里查不到字段?占位符大小写和序列化符号是关键
结构化字段能否被 Seq 提取,完全取决于日志事件的 Properties 字典是否被正确填充。常见失效场景:
- 写成
Log.Information("User {userid} login", id)→ 字段名是userid(小写),但传参变量叫id,Seq 里字段名不匹配就为空;应统一为{UserId}并保持 PascalCase - 传对象时用
{User}→ 只调用User.ToString(),输出纯文本如UserDto { Id = 123 };必须写成{@User}才触发 JSON 序列化,Seq 才能展开成嵌套字段 - 控制台能看到内容,Seq 却没有
UserId字段 → 检查是否误用了WriteTo.Console()单独配置,而没在WriteTo.Seq()中启用结构化传输(默认已开,但若自定义了formatter可能覆盖)
多环境部署时,Seq 地址和级别怎么管才不翻车?
硬编码 "http://localhost:5341" 在生产环境必然失败。实际做法是分层控制:
- 开发阶段用
appsettings.Development.json配"SeqUrl": "http://localhost:5341",并设restrictedToMinimumLevel: "Debug"方便排查 - 生产阶段切到
appsettings.Production.json,改用内网地址如"http://seq.internal:5341",并加apiKey和batchPostingLimit: 100提升吞吐 - 千万别在代码里写
.WriteTo.Seq(Configuration["SeqUrl"])—— 如果SeqUrl为空,CreateLogger()会抛异常;应先判空,或用Configuration.GetValue<string>("SeqUrl", null)</string>提供默认 fallback
日志进了 Seq,但搜索慢、聚合卡?注意两个隐藏性能点
Seq 查询性能不只取决于数据量,更受日志事件结构影响:
- 避免在占位符里拼接长字符串,比如
Log.Information("Request {Path} took {ElapsedMs}ms, body={@Body}", req.Path, elapsed, req.Body)——@Body若是几 MB 的 JSON,Seq 存储和索引都会变重;应只记录req.Body.Length或哈希摘要 - 高频日志(如每秒百次的健康检查)别全送 Seq,用
Filter.ByExcluding(e => e.Properties.ContainsKey("SourceContext") && e.Properties["SourceContext"].ToString().Contains("HealthCheck"))在客户端过滤掉 - 滚动文件和 Seq 不冲突,但别在
WriteTo.File()里也用CompactJsonFormatter—— 文件日志要可读,控制台/Seq 才需要紧凑格式;混用会导致文件里全是乱码
最常被忽略的是:Seq 里的字段名来自占位符本身,不是变量名,也不是类属性名;写错一个大小写,整条日志的分析价值就归零。调试时打开 Seq 的 “Raw event” 视图,直接看 Properties 对象长什么样,比猜快得多。










