2009-06-29 17 views
7

He intentado obtener log4net logging en mi aplicación web asp.net sin éxito o cualquier error notorio. Estoy intentando utilizar el appender ADONetAppender con la siguiente configuración:Log4Net no registra o error

<log4net> 
<appender name="ADONetAppender" type="log4net.Appender.ADONetAppender"> 
    <bufferSize value="1" /> 
    <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
    <connectionString value="server=" /> 
    <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception],[Context]) VALUES 
          (@log_date, @thread, @log_level, @logger, @message, @exception, @context)" /> 
    <parameter> 
    <parameterName value="@log_date" /> 
    <dbType value="DateTime" /> 
    <layout type="log4net.Layout.RawTimeStampLayout" /> 
    </parameter> 
    <parameter> 
    <parameterName value="@thread" /> 
    <dbType value="String" /> 
    <size value="32" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%t" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@log_level" /> 
    <dbType value="String" /> 
    <size value="512" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%p" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@context" /> 
    <dbType value="String" /> 
    <size value="512" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%x" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@logger" /> 
    <dbType value="String" /> 
    <size value="512" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%c" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@message" /> 
    <dbType value="String" /> 
    <size value="4000" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%m" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@exception" /> 
    <dbType value="String" /> 
    <size value="2000" /> 
    <layout type="log4net.Layout.ExceptionLayout" /> 
    </parameter> 
</appender> 
<root> 
    <level value="DEBUG" /> 
    <appender-ref ref="ADONetAppender" /> 
</root> 

En mi Application_Start global.asax me llaman

log4net.Config.XmlConfigurator.Configure(); 

Luego que intente conectarse:

protected static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 
protected void Page_Load(object sender, EventArgs e) 
{    
    log.Info("did I log yet?"); 
} 

Todo esto no hace nada por lo que puedo decir.

+2

me da la sensación de que esas credenciales de cadena de conexión son reales, probablemente es mejor no incluirlos en el futuro puestos ... – si618

+0

Tengo el mismo problema, esto es muy frustrante. No hay entradas de registro en el archivo db, no hay errores del rastreo de Log4Net ... nada. – znelson

Respuesta

7

Agregue añade el siguiente punto bajo bajo Configuración-> configSections

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 

Aunque es posible añadir los valores de configuración de log4net app.config de su proyecto o archivo web.config, es preferible colóquelos en un archivo de configuración separado. Además del beneficio obvio de la facilidad de mantenimiento, tiene el beneficio adicional de que log4net puede colocar un objeto FileSystemWatcher en su archivo de configuración para monitorear cuándo cambia y actualizar su configuración de forma dinámica.

Para utilizar un archivo de configuración distinto, añadir un archivo llamado Log4Net.config a su proyecto y agregue el atributo siguiente a su AssemblyInfo.cs archivo:

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

Nota: para aplicaciones web, esto supone que reside log4net.config en la raíz web. Asegúrese de que el archivo log4net.config esté marcado como "Copiar en la salida" -> "Copiar siempre" en Propiedades.

De here.

+1

entonces, si lo hace "Copiar a la salida" ¿no pondrá eso log4net.config en el directorio bin de su aplicación web así como en la raíz del sitio? – dotjoe

28

también puede establecer los siguientes appsettings para permitir log4net interna información de depuración

<appSettings> 
     <add key="log4net.Internal.Debug" value="true"/> 
</appSettings> 

Los mensajes de depuración internas se escriben en la consola (si lo tiene) o la traza (como la ventana de depuración en Visual estudio o dbgview de sysintenals). Esto te ayudará a solucionar problemas de log4net.

+1

Gracias, esto me ayudó a encontrar la excepción Oracle lanzada por log4net y resolver mi problema de inmediato. –

+1

Si está utilizando DebugView, pruebe el menú ** Capture **> ** Capture Global Win32 **. No estaba recibiendo nada hasta que lo hice. –

+1

¿Puede decirme dónde exactamente debo agregar este fragmento de código? Tengo una aplicación web .Net 4.0. – Germstorm

9

Internal debugging para log4Net es el camino a seguir según lo sugerido por @Pratik. Para escribir los detalles en un archivo haga lo siguiente:

Agregue lo siguiente en web.config incluso si está usando un archivo de configuración diferente para log4net.

<appSettings> 
    <add key="log4net.Internal.Debug" value="true"/> 
</appSettings> 

<system.diagnostics> 
<trace autoflush="true"> 
    <listeners> 
    <add 
    name="textWriterTraceListener" 
    type="System.Diagnostics.TextWriterTraceListener" 
    initializeData="C:\toolbox\SmartClient\log4net.txt" /> 
    </listeners> 
</trace> 
</system.diagnostics> 

Referencia

  1. How do I enable log4net internal debugging?
  2. log4net - Appenders not working in IIS7.5
+1

¡Esto es perfecto para depurar por qué no funciona en un entorno alojado! Gracias. –

Cuestiones relacionadas