我正在使用ASP.NET WebApi和NLog。 我想将每个请求信息(如correlationId)添加到我的日志消息中。在最好的情况下,NLog的用户不应该对此有所了解。 Logger本身应该能够从http请求中获取信息。
使用Unity我可以使用" PerRequestLifetimeManager"注入这些信息,但不推荐。我应该使用HttpContext.Items,但我对System.Web和HttpContext不满意。
根据请求范围,是否有可能在服务器上设置信息并在每次我想记录内容时将它们放入记录器中?
答案 0 :(得分:0)
NLog具有NLog.MappedDiagnosticContext
,可用于创建会话类型的日志记录变量。在ASP.Net和WebAPI中,使用异步上下文,您可能需要使用NLog.MappedDiagnosticsLogicalContext
您还需要更新目标'布局包含此信息:
<target layout="${longdate}|${level:uppercase=true}|${logger}|[${mdc:item=SomeVariable}]${message}" >
以下是您如何使用它:
try
{
NLog.MappedDiagnosticsLogicalContext.Set("SomeVariable", Guid.NewGuid().ToString());
//do your work
Log.Info("Some message here.");
//do more work
Log.Info("Finished!");
}
finally
{
NLog.MappedDiagnosticsLogicalContext.Remove("SomeVariable");
}
值得注意的是,我希望使用C#using
语句来更好地实现此目的,例如支持log4net。