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

时间:2016-02-06 17:02:16

标签: asp.net asp.net-mvc asp.net-core nlog

我正在尝试将NLog集成到AspNet 5(或使用新名称AspNet Core 1.0)Web应用程序中。不确定是否可能,但我想记录当前登录的用户。 这是我的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:&#39; aspnet-user-identity&#39;

我的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>

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

1 个答案:

答案 0 :(得分:2)

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

编辑:NLog.Web的ASP.NET 5兼容版现已推出!见NuGet