2009-09-08 10 views
27

Me preguntaba por qué no hay un trace level en log4Net. Este nivel parece estar perdido y, a veces, siento la necesidad de usarlo, por ejemplo, para mostrar qué eventos se están ejecutando en una aplicación. Esta función es part of log4J.¿Por qué no hay un nivel de rastreo en log4Net?

Sé que puedo crear un nivel personalizado como se habla here pero no quiero dedicar tiempo y esfuerzo a algo que creo que debería ser parte de la biblioteca.

¿Conoces una biblioteca de extensión de log4net que implementa esto o por qué esto no formaba parte del puerto de .net?

Respuesta

9

La interfaz log4net.ILog sólo expone métodos y propiedades para Fatal, Error, advertir, niveles de información y de depuración.

Acepto que esto es un poco limitante, y me gustaría ver un nivel más allí. Pero entonces la cantidad óptima de niveles probablemente sea "uno más que el número actual de niveles": siempre te encontrarás ocasionalmente queriendo un nivel más.

+1

Sí, estoy de acuerdo, probablemente te quedes con ganas de más. Aunque es extraño que hayan dejado TRACE fuera de la interfaz de ILog ya que está disponible en el SDK, como nos señaló en su respuesta – armannvg

+3

, sospecho que se agregó al SDK después de que se diseñó la interfaz ILog. – Joe

46

Puede agregar un Verbose (o nivel de seguimiento) a log4net utilizando métodos de extensión. Esto es lo que estoy usando: ejemplo

public static class ILogExtentions 
{ 
    private static readonly log4net.ILog log = 
     log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

    public static void Trace(this ILog log, string message, Exception exception) 
    { 
     log.Logger.Log(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, 
      log4net.Core.Level.Trace, message, exception); 
    } 

    public static void Trace(this ILog log, string message) 
    { 
     log.Trace(message, null); 
    } 

    public static void Verbose(this ILog log, string message, Exception exception) 
    { 
     log.Logger.Log(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, 
      log4net.Core.Level.Verbose, message, exception); 
    } 

    public static void Verbose(this ILog log, string message) 
    { 
     log.Verbose(message, null); 
    } 

} 

Uso:

public class ClientDAO 
{ 
    private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(ClientDAO)); 

    public void GetClientByCode() 
    { 
     log.Trace("your verbose message here"); 
     //.... 
    } 
} 

Fuente:

http://www.matthewlowrance.com/post/2010/07/14/Logging-to-Trace-Verbose-etc-with-log4net.aspx

+0

¿Es posible obtener un indicador IsTraceEnabled para consultar si el nivel TRACE está habilitado en el registro? – galmok

+0

No importa, las propiedades de extensión aún no existen. Tiene que ser un método de extensión, parece. – galmok

+1

Parece que el registro de campo privado nunca se usa. –

Cuestiones relacionadas