Serilog编辑

我们提供了一个 Serilog Enricher,它将跟踪 ID 添加到在活动跟踪期间创建的每行日志中。

该 Enricher 位于 Elastic.Apm.SerilogEnricher NuGet 包中。

您可以在配置 Serilog 记录器时启用它

var logger = new LoggerConfiguration()
   .Enrich.WithElasticApmCorrelationInfo()
   .WriteTo.Console(outputTemplate: "[{ElasticApmTraceId} {ElasticApmTransactionId} {Message:lj} {NewLine}{Exception}")
   .CreateLogger();

在上面的代码片段中,.Enrich.WithElasticApmCorrelationInfo() 启用了 Enricher,它将为在事务期间创建的日志行设置 2 个属性

  • ElasticApmTransactionId
  • ElasticApmTraceId

如您所见,在控制台接收器的 outputTemplate 中,这两个属性会被打印出来。当然,它们也可以与任何其他接收器一起使用。

如果您想将日志直接发送到 Elasticsearch,可以使用 Serilog.Sinks.ElasticSearch 包。此外,您可以将 Elastic.CommonSchema.Serilog 包中的 EcsTextFormatter 传递给 Elasticsearch 接收器,它会根据 Elastic Common Schema (ECS) 格式化所有日志,并确保跟踪 ID 最终位于正确的字段中。

添加了上面提到的两个包后,您可以像这样配置您的记录器

Log.Logger = new LoggerConfiguration()
.Enrich.WithElasticApmCorrelationInfo()
.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("https://127.0.0.1:9200"))
{
  CustomFormatter = new EcsTextFormatter()
})
.CreateLogger();

通过此设置,应用程序会自动将所有日志发送到 Elasticsearch,您将能够从跟踪跳转到日志,以及从日志跳转到跟踪。