如何让SEQ为自定义日志中的耗时显示彩色指标徽章?
在SEQ中显示自定义日志的耗时彩色徽章
要让SEQ像处理ASP.NET Core健康检查日志那样,给自定义Serilog日志显示彩色耗时徽章,核心是让日志事件符合SEQ的自动识别规则,以下是几种可行方案:
1. 使用SEQ默认识别的字段名
ASP.NET Core健康检查日志通过ElapsedMilliseconds字段触发SEQ的计时徽章,直接改用这个字段名即可:
// 健康检查风格日志示例 _logger.LogInformation( "Health check GET https://myapp/health succeeded with status code 200 in {ElapsedMilliseconds:0.000} ms", 405.705); // 业务处理日志示例 var position = new { Latitude = 25, Longitude = 134 }; var elapsedMs = 34; _logger.LogInformation("Processed {@Position} in {ElapsedMilliseconds:000} ms.", position, elapsedMs);
2. 自定义字段名:通过Enricher标记计时属性
如果不想修改现有字段名(比如继续用Elapsed),可以给字段添加SEQ识别的@timing元数据,通过Serilog enricher实现全局生效:
步骤1:创建自定义Enricher
public class TimingEnricher : ILogEventEnricher { private readonly string _targetField; public TimingEnricher(string targetField = "Elapsed") { _targetField = targetField; } public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory) { if (logEvent.Properties.TryGetValue(_targetField, out var value) && value is ScalarValue scalar && scalar.Value is double or int or float) { logEvent.AddOrUpdateProperty(propertyFactory.CreateProperty("@timing", scalar.Value)); } } }
步骤2:配置Serilog启用Enricher
Log.Logger = new LoggerConfiguration() .Enrich.With<TimingEnricher>() // 启用自定义计时Enricher .WriteTo.Seq("http://your-seq-instance-url") // 其他配置... .CreateLogger();
配置完成后,原有使用Elapsed字段的日志会自动被SEQ识别为计时指标,显示彩色徽章。
3. 零散场景:手动传入@timing属性
如果只是个别日志需要显示徽章,可直接在日志调用时附加@timing属性,无需全局配置:
var elapsedMs = 34; _logger.LogInformation( "Processed {@Position} in {Elapsed:000} ms.", position, elapsedMs, new { @timing = elapsedMs });
验证方法
在SEQ中打开日志事件的详情面板,查看Properties区域:
- 确认存在
ElapsedMilliseconds/Elapsed数值字段,或@timing属性 - 若字段存在仍不显示徽章,检查SEQ版本(建议使用v5及以上版本)
内容的提问来源于stack exchange,提问作者amg63
相关产品推荐
相关产品推荐

