我尝试在我的Web Api应用程序中记录请求编号,并将其作为自定义请求标头添加到第一个DelegatingHandler上:
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
request.Headers.Add(WebApiConstants.Headers.WebRequestCounterHeader, Interlocked.Increment(ref _requestsCounter).ToString("X8"));
return base.SendAsync(request, cancellationToken);
}
其中:
public const string WebRequestCounterHeader = "RequestIndex";
我的部分NLog配置如下:
<variable name="RequestNumber"
value="${aspnet-request:serverVariable=HEADER_RequestIndex}" />
<target name="TraceLogger"
type="File"
fileName="${TraceFullPath}"
archiveFileName="${TraceArchiveFullPath}"
maxArchiveFiles="100"
archiveNumbering="Sequence"
archiveEvery="Day"
layout="${FormattedDate} ${message}${RequestNumber} -> ${HttpMethodPadded} ${Url}" />
但我记录的邮件中没有包含请求编号:
26.10.2015 18:11:22.11 Begin -> [POST] /api/v1/login
根据MSDN和NLog的帮助: HEADER_ 与HTTP_不同,HEADER_中的所有字符都按原样解释。例如,如果指定HEADER_MY_HEADER,则服务器将搜索名为MY_HEADER的请求标头。
在我的情况下,哪种NLog配置是正确的?