在 AspNet vNext (MVC 6) 中将 NLog 与 asp-net 布局渲染器一起使用

Using NLog with asp-net layout renderers in AspNet vNext (MVC 6)

我正在尝试将 NLog 集成到 AspNet 5(或使用新名称 AspNet Core 1.0)网络应用程序中。不确定是否可能,但我想记录当前登录的用户。 这是我的 NLog 配置文件。

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true">
  <targets>
    <target name="logfile"
            xsi:type="File"
            fileName="file.txt"
            layout="${longdate}|${message}|${identity}|${aspnet-user-identity}" />
  </targets>
  <rules>
    <logger name="WebApplication2.*" minlevel="Info" writeTo="logfile" />
  </rules>
</nlog>

关键是我得到了

System.ArgumentException: LayoutRenderer cannot be found: 'aspnet-user-identity'

我的 project.json 文件如下所示:

  "dependencies": {
    .....
    "NLog.Framework.logging": "1.0.0-rc1-final",
    "NLog": "4.4.0-alpha1",
    "NLog.Config": "4.3.0-beta1",
    "NLog.Extended": "4.0.0-rc",
    "NLog.Web": "4.1.0"
  },

也许我遗漏了什么,或者 NLog 还不支持它?

编辑: 我发现目前不支持自动加载扩展。所以,我必须修改我的NLog.config,如:

 <extensions>
    <add assembly="NLog.Web"/>
    <add assembly="NLog.Extended"/>
  </extensions>

但现在我得到当前用户的空白输入。有什么想法吗?

internal log 将提供更多信息,说明加载扩展失败的原因。

还有其他加载扩展的方法,assemblyFile attribute 和编程:

//target
ConfigurationItemFactory.Default.Targets
                        .RegisterDefinition("MyFirst", typeof(MyNamespace.MyFirstTarget));

//layout renderer
ConfigurationItemFactory.Default.LayoutRenderers
                        .RegisterDefinition("hello-world", typeof(MyNamespace.HelloWorldLayoutRenderer ));

编辑:做了一些测试。这适用于加载程序集:

<extensions> <add assembly="NLog.Web" /> </extensions>

但太糟糕了NLog.Web isn't ASP.NET 5 compatible, yet。我们不能在那里使用 HttpContext.Current

编辑: ASP.NET 5 兼容版本 NLog.Web 现在可用!参见 NuGet