2009-04-16 13 views
140

Uso log4net todo el tiempo, pero una cosa que nunca he descubierto es cómo saber qué está pasando dentro. Por ejemplo, tengo un appender de consola y un appender de base de datos en mi proyecto. Hice algunos cambios en la base de datos y el código, y ahora el appender de la base de datos ya no funciona. Descubriré por qué eventualmente, pero sería de gran ayuda si pudiera ver lo que sucede dentro de log4net.Cómo rastrear los problemas de log4net

¿Log4net genera algún tipo de salida que pueda ver para intentar determinar el origen de mi problema?

Respuesta

224

En primer lugar hay que establecer este valor en el archivo de configuración de la aplicación:

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

Entonces, para determinar el archivo en el que desea guardar la salida que se puede añadir el siguiente código en el mismo archivo .config :

<configuration> 
... 

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

... 
</configuration> 

puede encontrar una explicación más detallada de conformidad con '¿Cómo se activa la depuración interna log4net?' en el log4net FAQ page.

+7

Solo asegúrese de que el proceso en el que se ejecuta la aplicación tiene derechos sobre la ruta donde desea crear el archivo de texto de registro ("C: \ tmp \ log4net.txt" en el ejemplo anterior) – Jtrx

+0

esta es la que falta consejo para encontrar lo que está sucediendo en mi aplicación gracias: D – NFRiaCowboy

+2

Parece que la depuración interna no tiene marcas de tiempo – snit80

15

Además de la respuesta anterior, puede utilizar esta línea para ver el registro en tiempo real en lugar del resultado c: \ tmp \ log4net.txt.

log4net.Util.LogLog.InternalDebugging = true; 

Por ejemplo, en una aplicación de consola, puede agregar esto y luego ver la salida en tiempo real. Es bueno para depurar log4net en un pequeño arnés de prueba para ver qué está pasando con el appender que está probando.

24

Si está utilizando un archivo de log4net de configuración también se puede activar la depuración no cambiando el nodo superior a:

<log4net debug="true"> 

Esto va a funcionar una vez que se vuelve a cargar la configuración y suponiendo que su escucha de seguimiento está configurado correctamente .

0

Si el registro interno no le proporciona suficiente información, es muy fácil construir y depurar el source code. Si no desea mezclar esto con su proyecto de desarrollo, agregue una aplicación de consola simple que simplemente registra un mensaje, copie el log4net.config de su proyecto a esta aplicación y depure la clase en cuestión.

0

Asegúrese de que la aplicación raíz donde su punto de entrada registra algo para log4net. Dale uno de estos:

private static ILog logger = LogManager.GetLogger(typeof(Program)); 
static void Main(string[] args) 
{ 
    logger.InfoFormat("{0} v.{1} started.", Assembly.GetExecutingAssembly().GetName().Name, Assembly.GetExecutingAssembly().GetName().Version.ToString()); 

Con 2.0.8, tuve una situación interesante. Creé un proyecto de biblioteca y un proyecto de prueba exe que demostraría sus capacidades. El proyecto de la biblioteca se configuró para usar Log4net como era el proyecto exe. El proyecto exe usó el atributo de información de la asamblea para registrar la configuración, pero no obtuve salida de registro a la consola ni al archivo de registro. Cuando encendí el registro de depuración interno de log4net, obtuve algunos mensajes internos escritos en la consola, pero todavía ninguno de mis registros normales. No se informaron errores. Todo comenzó a funcionar cuando agregué el código anterior a mi programa. De lo contrario, Log4net se configuró correctamente.

Cuestiones relacionadas