2011-12-28 21 views
24

que estoy usando log4net en mi proyecto ASP.NET MVC3, pero todas las propiedades de registro como IsDebugEnabled == false¿Por qué todos mis niveles de log4net son falsos?

En mi AssemblyInfo tengo:

[assembly: XmlConfigurator(Watch = true)] 

En mi clase de registro que tengo

public Log4NetLogger() 
{ 
    log4net.Config.XmlConfigurator.Configure(); 
    Logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
} 

Mi paquete de configuración relacionada en Web.Config es:

<?xml version="1.0" encoding="utf-8"?> 
<!-- 
    For more information on how to configure your ASP.NET application, please visit 
    http://go.microsoft.com/fwlink/?LinkId=152368 
    --> 
<configuration> 
    <configSections> 
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false"/> 
     </sectionGroup> 
    </configSections> 

    <log4net debug="false"> 
     <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> 
     <bufferSize value="100" /> 
     <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
     <connectionString value="{removed}" /> 
     <commandText value="INSERT INTO Logging ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" /> 
     <parameter> 
      <parameterName value="@log_date" /> 
      <dbType value="DateTime" /> 
      <layout type="log4net.Layout.RawTimeStampLayout" /> 
     </parameter> 
     <parameter> 
      <parameterName value="@thread" /> 
      <dbType value="String" /> 
      <size value="255" /> 
      <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%thread" /> 
      </layout> 
     </parameter> 
     <parameter> 
      <parameterName value="@log_level" /> 
      <dbType value="String" /> 
      <size value="50" /> 
      <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%level" /> 
      </layout> 
     </parameter> 
     <parameter> 
      <parameterName value="@logger" /> 
      <dbType value="String" /> 
      <size value="255" /> 
      <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%logger" /> 
      </layout> 
     </parameter> 
     <parameter> 
      <parameterName value="@message" /> 
      <dbType value="String" /> 
      <size value="4000" /> 
      <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%message" /> 
      </layout> 
     </parameter> 
     <parameter> 
      <parameterName value="@exception" /> 
      <dbType value="String" /> 
      <size value="2000" /> 
      <layout type="log4net.Layout.ExceptionLayout" /> 
     </parameter> 
     </appender> 
     <!--Possible levels:--> 
     <!--DEBUG--> 
     <!--INFO--> 
     <!--WARN--> 
     <!--ERROR--> 
     <!--FATAL--> 
     <root> 
     <level value="All" /> 
     <appender-ref ref="AdoNetAppender" /> 
     </root> 
    </log4net> 

    </applicationSettings> 

</configuration> 

ya tengo frustrado a un punto de que sólo quieren hacer

public Log4NetLogger() 
{ 
    Logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 


    Logger.IsDebugEnabled = true; 
} 

Sin embargo, por supuesto, Logger.IsDebugEnabled no tiene ningún set:/

¿Qué tengo que hacer para conseguir esta maldita cosa a trabajar?

+0

¿Puede aprobar una de las siguientes respuestas si ha resuelto este problema? –

Respuesta

2

Nunca he visto <level value="All" /> antes, generalmente acabo de establecer value en uno de los niveles (ya que incluyen los niveles superiores o inferiores a los que tiene enumerados en su configuración, en la pila de niveles) Algo como esto:

<level value="DEBUG" /> 

También puede intentar probar con un registrador explícita, sólo para ver si el problema podría ser otra cosa. Algo simple adyacente a la appender nodo (s) de esta manera:

<logger name="Log4NetTEST" > 
    <level value="DEBUG" /> 
    <appender-ref ref="AdoNetAppender" /> 
</logger> 

A continuación, cuando se prueba que en su código que crearía el registrador de la siguiente manera:

LogManager.GetLogger("Log4NetTEST"); 
+2

Estoy usando '' exitosamente desde hace años :-) –

+2

fwiw: Los valores posibles para Log4Net son: ALL, DEPUR, INFO, WARN, ERROR, FATAL, OFF. Recuerde, estos son sensibles a las mayúsculas y minúsculas también. –

6

Log4net espera que su sección de configuración de no estar agrupado Debido a que en su configuración ha puesto su sección log4net dentro de un ApplicationSettingsGroup (applicationSettings) log4net no encontrará su configuración. Usted puede modificar el sector log4net fuera del grupo o puede especificar el grupo al llamar XmlConfigurator.Configure:

XmlConfigurator.Configure(
    ConfigurationManager.GetSection(
     "applicationSettings/log4net") as XmlElement); 
+0

¡Fantástica solución! ¡Esto también me estaba impulsando NUTS !!!! – nterry

3

niveles de registro son mayúsculas y minúsculas, así que en vez de:

<level value="All" />

debe ser

<level value="ALL" />

también me resulta mucho más fácil crear una conf log4net separada archivo de configuración Crear un archivo llamado log4net.config y establezca la propiedad de Copiar al Directorio de salida a Copiar siempre - (copiar la configuración de App.config en este archivo)

Entonces, cuando se ajusta el uso de configuración:

XmlConfigurator.Configure(new System.IO.FileInfo("log4net.config"));

23

He tenido este mismo problema. Lo soluciono utilizando la siguiente línea de código en el método Application_Start en Global.asax.cs (suponiendo que es a.aplicación web Net)

log4net.Config.XmlConfigurator.Configure(); 
16

cambiar su línea para siguiente en AssemblyInfo.cs:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)] 

y poner la configuración de log4net en ese archivo.

0

No se setter para IsDebugEnabled ya que es de sólo lectura ..

Uso log4net.Config.XmlConfigurator.Configure(); en cualquier método antes de utilizar ingrese

y en App.config el ajuste debe ser:

<root> 
     <level value="ALL" /> 
     <appender-ref ref="AppenderName" /> 
    </root> 
0

cambiar su línea para siguiente en AssemblyInfo.cs:

[assembly: log4net.Config.XmlConfigurator (reloj = true)] se añade

Asegurar DLL log4net y también poner la configuración de log4net en el archivo web.config como

<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler" /> 
    </configSections> 
    <log4net> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="RollingFileAppender" /> 
    </root> 
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="C:\LOGS\IDMUserRoleManagement\IDMUserRoleManagement.txt" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="5" /> 
     <maximumFileSize value="1000KB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%d{yyyy-MM-ddTHH:mm:ss} %-5p [%t] - %m%n" /> 
     </layout> 
    </appender> 
    </log4net> 
</configuration> 
2

Parece que se ha perdido la configuración de propiedad del archivo de configuración cambia Copiar al directorio de salida = "Copiar siempre" Consulte esta imagen de configuración para obtener más información. Config file setting Properties

0

Faltan la etiqueta de apertura para applicationSettings. Esa podría ser la causa

0

si archivo de registro de clase (Log4NetLogger) está en una biblioteca de clases solo, entonces el código: [assembly: log4net.Config.XmlConfigurator (C .... debe estar en la misma biblioteca de clases .

por ejemplo: lib 1: my.web (un proyecto MVC) lib 2: my.common (un proyecto de biblioteca de clases)

si envuelves código logmanager en my.common, a continuación, "[ assembly: log4net.Config.XmlConfigurator (C ... "DEBERÍA ESTAR EN my.common, si lo pones en my.web, no funcionará!

Cuestiones relacionadas