NLog注入上下文信息c#

本文关键字:信息 上下文 注入 NLog | 更新日期: 2023-09-27 18:06:27

我正在使用ASP。. NET WebApi和NLog。我想将每个请求的信息(如correlationId)添加到日志消息中。在最好的情况下,NLog的用户应该对此一无所知。Logger本身应该能够从http请求中获取信息。

在Unity中,我可以使用"PerRequestLifetimeManager"来注入这些信息,但不建议这样做。我应该使用HttpContext。物品,但我对系统不满意。Web和HttpContext.

是否有可能设置服务器上的信息,并得到他们在我的记录器每次我想记录的东西,基于请求范围?

NLog注入上下文信息c#

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支持。