Serilog
编辑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,您将能够从跟踪跳转到日志,以及从日志跳转到跟踪。