将 Serilog 与 .Net 核心和 App Insights 结合使用
Using Serilog with .Net core and App Insights
我之前直接使用 App insights 进行应用程序日志记录,我看到 .Net core 平台也创建了进入 App insights 的跟踪事件。
在新的 .Net 核心 API 应用程序中,我想使用 Serilog 进行应用程序日志记录,并使用 App Insight 来存储和可视化日志事件。我想知道:
如何继续将 .Net core .created 跟踪事件获取到 App insights?
如何将相关 ID 从我的应用程序传递到 .Net 核心创建的跟踪事件?
App Insight 门户中的端到端交易功能会同时显示所有事件吗?了解并关注 SQL 调用的延迟对我来说很重要。
如果您在 .Net 核心中使用 ILogger 进行日志记录,则可以使用 startup.cs 的 following modification 将这些消息定向到 Application Insights:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
/*...existing code..*/
loggerFactory.AddApplicationInsights(app.ApplicationServices, LogLevel.Warning);
}
如果您使用自己的相关 ID,则可以在遥测项的 Context.Operation
字段中使用您自己的 Telemetry Initializer or pass those values in the respective headers(Request-ID
(全局 ID)和Correlation-Context
(名称-值对))在此应用程序的请求中 - AI 将从中获取相关 ID。
端到端事务应该在 Application Insights 遥测的详细信息视图中的时间线上一起显示(Requests/Dependencies 和异常)。有了你自己的相关 ID,如果它们从事务一开始就在那里(例如在第一个组件中),它应该也能正常工作——否则在中间注入它们会破坏链条。
仅使用 Serilog.Sinks.ApplicationInsights 是 不够的 ,因为它不会将 Serilog 事件与 Application Insights 上的其余遥测相关联。
要关联事件,使它们显示为一个 "End-to-End transaction" - 您必须执行以下操作:
- 创建一个 Serilog enricher,它将当前
Activity
id 记录为 LogEventProperty
中的 ScalarValue
- 参见 OperationIdEnricher
- [可选]为此增强器创建扩展 - 请参阅 LoggingExtensions
- 注册增强器/通过代码或配置将其添加到管道中 - 请参阅 logging.json
- 为 ApplicationInsights 创建自定义
TelemetryConverter
(来自 TraceTelemetryConverter
或 EventTelemetryConverter
的子类),它将根据 1 中设置的值设置 telemetry.Context.Operation.Id
)- 参见 OperationTelemetryConverter
查看我的博客 post“Serilog with ApplicationInsights”,其中详细解释了上述要点和链接
此外,请务必查看 MSDNTelemetry correlation in Application Insights
我之前直接使用 App insights 进行应用程序日志记录,我看到 .Net core 平台也创建了进入 App insights 的跟踪事件。
在新的 .Net 核心 API 应用程序中,我想使用 Serilog 进行应用程序日志记录,并使用 App Insight 来存储和可视化日志事件。我想知道:
如何继续将 .Net core .created 跟踪事件获取到 App insights?
如何将相关 ID 从我的应用程序传递到 .Net 核心创建的跟踪事件?
App Insight 门户中的端到端交易功能会同时显示所有事件吗?了解并关注 SQL 调用的延迟对我来说很重要。
如果您在 .Net 核心中使用 ILogger 进行日志记录,则可以使用 startup.cs 的 following modification 将这些消息定向到 Application Insights:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
/*...existing code..*/
loggerFactory.AddApplicationInsights(app.ApplicationServices, LogLevel.Warning);
}
如果您使用自己的相关 ID,则可以在遥测项的 Context.Operation
字段中使用您自己的 Telemetry Initializer or pass those values in the respective headers(Request-ID
(全局 ID)和Correlation-Context
(名称-值对))在此应用程序的请求中 - AI 将从中获取相关 ID。
端到端事务应该在 Application Insights 遥测的详细信息视图中的时间线上一起显示(Requests/Dependencies 和异常)。有了你自己的相关 ID,如果它们从事务一开始就在那里(例如在第一个组件中),它应该也能正常工作——否则在中间注入它们会破坏链条。
仅使用 Serilog.Sinks.ApplicationInsights 是 不够的 ,因为它不会将 Serilog 事件与 Application Insights 上的其余遥测相关联。
要关联事件,使它们显示为一个 "End-to-End transaction" - 您必须执行以下操作:
- 创建一个 Serilog enricher,它将当前
Activity
id 记录为LogEventProperty
中的ScalarValue
- 参见 OperationIdEnricher - [可选]为此增强器创建扩展 - 请参阅 LoggingExtensions
- 注册增强器/通过代码或配置将其添加到管道中 - 请参阅 logging.json
- 为 ApplicationInsights 创建自定义
TelemetryConverter
(来自TraceTelemetryConverter
或EventTelemetryConverter
的子类),它将根据 1 中设置的值设置telemetry.Context.Operation.Id
)- 参见 OperationTelemetryConverter
查看我的博客 post“Serilog with ApplicationInsights”,其中详细解释了上述要点和链接
此外,请务必查看 MSDNTelemetry correlation in Application Insights