如何配置Seq实现实时日志展示并显示异常堆栈跟踪
Sitecore + Seq 日志问题解决方案
1. 配置实时日志(消除3分钟延迟)
日志延迟源于Serilog.Sinks.Seq默认的批量发送策略,调整以下配置即可实现实时推送:
修改Sitecore配置文件(通常路径:
App_Config/Include/Serilog/Serilog.config):
添加或更新Seq sink的批量参数:<add key="serilog:write-to:Seq.batchPostingLimit" value="1" /> <add key="serilog:write-to:Seq.period" value="00:00:01" />batchPostingLimit=1:每条日志单独发送,不攒批period=00:00:01:最多等待1秒发送,确保实时性
代码配置方式(若用代码初始化Serilog):
在LoggerConfiguration中指定Seq sink参数:new LoggerConfiguration() .WriteTo.Seq("http://your-seq-instance-url", batchPostingLimit: 1, period: TimeSpan.FromSeconds(1)) // 其他配置... .CreateLogger();
注意:若Sitecore使用了日志桥接组件(如Log4Net转Serilog),需确认桥接器无额外延迟配置。
2. 显示完整异常消息与堆栈跟踪
确认Serilog.Exceptions配置正确
- 版本兼容检查:确保
Serilog.Exceptions与当前项目的Serilog、Serilog.Sinks.Seq版本匹配,避免版本冲突。 - 正确添加异常增强器:
- 配置文件方式:在
Serilog.config中添加:<add key="serilog:enrich:WithExceptionDetails" /> - 代码配置方式:在
LoggerConfiguration中加入(需在WriteTo之前配置):new LoggerConfiguration() .Enrich.WithExceptionDetails() .WriteTo.Seq("http://your-seq-instance-url") // 其他配置... .CreateLogger();
- 配置文件方式:在
规范日志记录方式
必须使用带Exception参数的日志方法,才能让Serilog捕获完整异常信息:
try { // 业务逻辑代码 } catch (Exception ex) { // 正确写法:传入Exception对象,保留堆栈信息 Log.Error(ex, "STRATUM_ERROR Input string was not in a correct format"); // 错误写法:仅传递消息,丢失堆栈 // Log.Error("STRATUM_ERROR {Message}", ex.Message); }
Seq门户视图调整
在Seq中确保事件视图识别异常字段:
- 打开事件详情页,检查是否显示
Exception属性(Serilog.Exceptions会将完整异常信息序列化到该字段) - 若未自动显示,可自定义视图模板,添加
{Exception}字段,Seq会自动将其渲染为可折叠的堆栈跟踪面板
内容的提问来源于stack exchange,提问作者sukesh
相关产品推荐
相关产品推荐

