Serilog

编辑

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

该丰富器位于 Elastic.Apm.SerilogEnricher NuGet 包中。

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

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

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

  • 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,并且您将能够在跟踪和日志之间跳转。