我正在尝试将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>
但现在我得到了当前用户的空白输入。有什么想法吗?
答案 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