NLog注入上下文信息c#
本文关键字:信息 上下文 注入 NLog | 更新日期: 2023-09-27 18:06:27
我正在使用ASP。. NET WebApi和NLog。我想将每个请求的信息(如correlationId)添加到日志消息中。在最好的情况下,NLog的用户应该对此一无所知。Logger本身应该能够从http请求中获取信息。
在Unity中,我可以使用"PerRequestLifetimeManager"来注入这些信息,但不建议这样做。我应该使用HttpContext。物品,但我对系统不满意。Web和HttpContext.是否有可能设置服务器上的信息,并得到他们在我的记录器每次我想记录的东西,基于请求范围?
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支持。