2011-06-10 8 views
20

He estado trabajando para configurar NLog v2 en mi aplicación ASP.NET MVC 3 y hasta ahora ha funcionado muy bien. (Estoy usando el paquete del repositorio oficial nuGet) Sin embargo, cuando trato de cambiar el diseño del registro para incluir cualquiera de los renderizadores de diseño aspnet- *, aparece un error de configuración. He reducido el problema a la siguiente caso de uso mínima:NLog lanza la excepción de configuración en todos los renderizadores de diseño aspnet

En el bloque configSections:

<section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/> 

El bloque 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> 

Si cambio de diseño utiliza ningún combinación de procesadores que no son parte de la familia aspnet *, esto funciona bien (no he probado todos, pero he visto bastantes). El error que recibo está aquí:

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: 

No tengo ni idea de lo que está pasando. No estoy seguro de qué pasa con ese procesador que hace que la configuración se vuelva inválida. Estuve dando vueltas la mayor parte del día y no he llegado a ninguna parte, así que espero que alguien aquí pueda ayudar.

Gracias!

Respuesta

31

Asegúrese de que ha indicado el ensamblado NLog.Extended que es donde los diseños se definen y lo que debe haber sido añadido por el paquete NuGet así a las referencias:

<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> 
+0

Gracias. Me siento un poco tonto ahora por perder eso. ¡Realmente aprecio la ayuda! – Jacob

+0

Simplemente se niega a funcionar para mí. No importa qué variable intente, la salida está en blanco :( – Storm

+1

Como han dicho algunas respuestas: Esto ahora está en NLog.Web. Me perdí completamente esto ya que toda la información en línea te dice que agregas NLog.Extended – 4imble

1

En mi caso yo estaba usando extensión de le_nlog y por una razón, ¡no se instaló en la aplicación!

así que instalé * * le_nlog al hacerlo:

PM> Install-Package le_nlog 
8

solución alternativa si Darin no funciona

Debe haber NLog.Extended referencia como Darin menciona http://nuget.org/packages/NLog.Extended

A partir de NLog 2.0 no necesita agregar referencia en el XML de configuración.

Mi problema es que no tengo referencias duras a NLog.Extended en mi capa web (donde está mi web.config) por lo que el compilador no estaba copiando el archivo donde tenía que estar.

Esto se puede solucionar fácilmente añadiendo una referencia difícil de NLog.Extended que es un no-op donde está configurando el registro:

//forces the compiler to include NLog.Extensions in all downstream output directories 
private static AspNetApplicationValueLayoutRenderer blank = new AspNetApplicationValueLayoutRenderer(); 
Cuestiones relacionadas