NLog会在所有aspnet布局渲染器上抛出配置异常

时间:2011-06-10 03:09:12

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

我一直在努力在我的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: 

我真的不知道发生了什么。我不确定该渲染器会导致配置无效。我一整天大部分时间一直在敲打它并且无处可去,所以我希望有人可以提供帮助。

谢谢!

4 个答案:

答案 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