【发布时间】:2018-10-20 03:05:49
【问题描述】:
在 ASP.NET Core 2 应用程序中,我需要每个请求的唯一标识符(例如 Guid),以便我可以在每个日志中包含该 ID 并了解每个请求的日志序列。
我自己写这个并不难,但我想知道是否有我可以使用的内置功能或实现这一点的 ASP.NET Core 2 方式。
【问题讨论】:
标签: asp.net-core asp.net-core-2.0
在 ASP.NET Core 2 应用程序中,我需要每个请求的唯一标识符(例如 Guid),以便我可以在每个日志中包含该 ID 并了解每个请求的日志序列。
我自己写这个并不难,但我想知道是否有我可以使用的内置功能或实现这一点的 ASP.NET Core 2 方式。
【问题讨论】:
标签: asp.net-core asp.net-core-2.0
ASP.NET Core 也有 HttpContext.TraceIdentifier 唯一标识当前请求。
它是由 Kestrel 为每个传入请求生成的,因此不适用于关联对另一个服务的调用,但适用于将单个请求的日志关联在一起,或关联可能显示的错误消息具有相应日志的用户。
【讨论】:
您可以使用System.Diagnostics.Activity 类(source)。来自Activity User Guide
Activity.Id用作 HTTP Correlation Protocol 方面的分层请求 ID
这例如被Microsoft/ApplicationInsights-aspnetcore 用于应用监控。
【讨论】:
System.Diagnostics.Activity.Current,那么您可以使用 System.Diagnostics.Activity.Current?.Id 或 .RootId,并且还可以与您的 ApplicationInsights 日志相关联。 (参考:github.com/Microsoft/ApplicationInsights-aspnetcore/issues/504)
听起来您正在寻找correlation id。也许Correlation ID Middleware 会有所帮助?
【讨论】: