我一直在努力在我的ASP.NET MVC 3应用程序上设置NLog v2,到目前为止它运行良好。 (我正在使用官方nuGet存储库中的软件包)但是,当我尝试更改日志布局以包含任何aspnet- *布局渲染器时,我收到配置错误。我已将问题减少到以下最小用例:
在configSections块中:
<section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
Nlog块:
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" throwExceptions="true">
<variable name="logDirectory" value="C:\Logs" />
<targets>
<target name="logFile" xsi:type="File" fileName="${logDirectory}\app.log"
layout="${aspnet-user-identity}" />
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="logfile" />
</rules>
如果我改变布局使用不属于aspnet *系列的渲染器的任何组合,这很好用(我没有测试过每一个,但我看了很多)。我得到的错误是:
Configuration Error
Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.
Parser Error Message: An error occurred creating the configuration section handler for nlog: Exception occurred when loading configuration from C:\..[snip]..\web.config
Source Error:
Line 16: </configSections>
Line 17:
Line 18: <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
Line 19: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" throwExceptions="true">
Line 20:
我真的不知道发生了什么。我不确定该渲染器会导致配置无效。我一整天大部分时间一直在敲打它并且无处可去,所以我希望有人可以提供帮助。
谢谢!
答案 0 :(得分:32)
确保您引用了NLog.Extended
程序集,这些程序集是定义这些布局的,并且必须由NuGet程序包添加到引用中:
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
throwExceptions="true">
<extensions>
<add assembly="NLog.Extended" />
</extensions>
<variable name="logDirectory" value="C:\Logs" />
<targets>
<target name="logFile"
xsi:type="File"
fileName="${logDirectory}\app.log"
layout="${aspnet-user-identity} ${message}" />
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="logfile" />
</rules>
</nlog>
答案 1 :(得分:11)
从NLog 4.0开始,ASP.NET渲染器现在位于Nlog.Web中 http://nlog-project.org/2015/06/13/NLog-Extended_NLog-Web_and_NLog-Windows-Forms.html
答案 2 :(得分:8)
如果达林不起作用的替代解决方案
您必须将NLog.Extended引用为Darin提及 http://nuget.org/packages/NLog.Extended
从NLog 2.0开始,您无需在配置XML中添加引用。
我的问题是我在我的网络层(我的web.config所在的地方)中没有对NLog.Extended的硬引用,因此编译器没有将文件复制到需要它的位置。
通过添加NLog的扩展引用可以很容易地解决这个问题。无论您在何处配置日志记录,这都是无操作:
//forces the compiler to include NLog.Extensions in all downstream output directories
private static AspNetApplicationValueLayoutRenderer blank = new AspNetApplicationValueLayoutRenderer();
答案 3 :(得分:1)
在我的情况下,我使用了le_nlog的扩展名,出于某种原因,它没有安装在应用程序中!
所以我这样安装了* le_nlog *:
PM> Install-Package le_nlog