Asp.net web api 我可以使用Serilog.Extra.Web';s HttpRequestNumber或HttpRequestId作为SerilogMetrics定时操作标识符?

Asp.net web api 我可以使用Serilog.Extra.Web';s HttpRequestNumber或HttpRequestId作为SerilogMetrics定时操作标识符?,asp.net-web-api,metrics,serilog,Asp.net Web Api,Metrics,Serilog,我在Web API中使用SerilogMetrics的BeginTimedOperation(),如果能够使用HttpRequestNumber或HttpRequestId属性(来自相应的Serilog.Extra.Web Enricher)作为标识符,那就太好了,使与时间相关的日志条目在请求中与其他日志条目关联变得非常容易 比如: using (logger.BeginTimedOperation("doing some work", HttpRequestNumberEnricher.Cur

我在Web API中使用SerilogMetrics的
BeginTimedOperation()
,如果能够使用
HttpRequestNumber
HttpRequestId
属性(来自相应的Serilog.Extra.Web Enricher)作为标识符,那就太好了,使与时间相关的日志条目在请求中与其他日志条目关联变得非常容易

比如:

using (logger.BeginTimedOperation("doing some work", HttpRequestNumberEnricher.CurrentRequestNumber))
{ ... }
.WriteTo.File(...,
    outputTemplate: "{Timestamp} [{Level}] ({HttpRequestId}) {Message} ...")

除了在
HttpContext.Current
中搜索神奇(即非公共)命名属性之外,这是可以实现的吗?谢谢

如果您在web请求期间开始定时操作,则操作的事件将已被标记为
HttpRequestId

当您登录到Seq这样的结构化日志服务器时,您会看到它,但是如果您将它写入文本文件或跟踪,那么默认情况下,输出消息中不会包含该属性。要在其中显示,请使用以下内容:

using (logger.BeginTimedOperation("doing some work", HttpRequestNumberEnricher.CurrentRequestNumber))
{ ... }
.WriteTo.File(...,
    outputTemplate: "{Timestamp} [{Level}] ({HttpRequestId}) {Message} ...")
日志记录方法使用一个默认的模板,你可以从中获得灵感,虽然没有明确的参考,但是有一些信息散布在世界各地