繁体   English   中英

NLog并发请求到不同的文件

[英]NLog Concurrent Requests into different files

正如标题所暗示的,我试图将单独的请求记录到我的 .NET Web API 控制器以分隔文件。

随着{var}的引入,这就是我在 c# 代码中尝试的内容。

private static Logger logger = LogManager.GetLogger("test");
[HttpPost, Route("xyz")]
public IHttpActionResult Post(Obj value)
{
    var guid = Guid.NewGuid();
    LogManager.Configuration.Variables["test"] = guid.ToString();
    logger.Info(value);
    //do my execution here.
}

我的 Nlog.Config 看起来像这样:

<variable name="test" value=""/>
<targets async="true">
    <target xsi:type="File" 
    name="concurrents" 
    fileName="${basedir}/nlogs/${logger}/${var:test}.log" 
    layout="${uppercase:${level}} |  ${callsite} | ${date:format=HH\:mm\:ss.fff} | &quot;${message}&quot;" 
    createDirs="true" />
    </target>
</targets>
<rules>
    <logger name="test" minlevel="Info" writeTo="concurrents"></logger>
</rules>

大家可能已经知道,

当并发请求进来时,我试图通过创建一个新的 Guid 并将其分配给{var}并以 var 的名称创建文件来记录每个请求。

日志不知何故混淆了,请求的一半在一个文件中,另一半在另一个文件中。

老实说,我想我遗漏了一些我应该知道但不确定在哪里的基本知识。

如果有人能指出正确的方向并帮助我了解如何在不同的文件中记录当前请求,那就太好了。

干杯

变量处于全局级别,不适用于多线程环境(http 请求)

一个好的解决方案是在 HttpContext 级别设置 guid:

HttpContext.Current.Items["myvariable"] = guid.ToString();

并使用

${aspnet-item:variable=myvariable}

您需要用于 ASP.NET Core 的NLog.Web.AspNetCore包 - 对于 ASP.NET 非核心,您需要NLog.Web

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM