在 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
我正在尝试将 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