2009-09-08 21 views
27

Właśnie się zastanawiałem, dlaczego nie ma trace level w log4Net. Ten poziom wydaje się być nieobecny i czasami odczuwam potrzebę jego użycia, na przykład do wyprowadzania, jakie zdarzenia są wykonywane w aplikacji. Ta funkcja to part of log4J.Dlaczego w log4Net nie ma poziomu śledzenia?

Wiem, że mogę utworzyć niestandardowy poziom, tak jak to jest omawiane na temat here, ale nie chcę wkładać czasu i wysiłku w coś, co moim zdaniem powinno być częścią samej biblioteki.

Czy znasz bibliotekę rozszerzeń log4net, która implementuje to lub dlaczego nie była częścią portu do .net

Odpowiedz

9

Interfejs log4net.ILog eksponuje tylko metody i właściwości dla Fatal Error, ostrzegają, poziomy Informacje i debugowania.

Zgadzam się, że jest to trochę ograniczające i chciałbym zobaczyć jeszcze jeden poziom. Ale wtedy optymalna liczba poziomów jest prawdopodobnie "o jeden więcej niż obecna liczba poziomów" - zawsze znajdziesz się od czasu do czasu z jeszcze jednym poziomem.

+1

Tak, zgadzam się, prawdopodobnie masz więcej ochoty. Dziwne jednak, że pozostawili TRACE z interfejsu ILog, ponieważ jest on dostępny w SDK, jak zauważyłem w jego odpowiedzi – armannvg

+3

Podejrzewam, że został dodany do SDK po zaprojektowaniu interfejsu ILog. – Joe

46

Możesz dodać Verbose (lub poziom śledzenia) do log4net, używając metod rozszerzeń. To właśnie używam: przykład

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); 
    } 

} 

Zastosowanie:

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

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

Źródło:

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

+0

Czy jest możliwe uzyskanie flagi IsTraceEnabled do zapytania, czy poziom TRACE jest włączony w rejestrowaniu? – galmok

+0

Nieważne, właściwości rozszerzeń jeszcze nie istnieją. Musi to być metoda rozszerzenia. – galmok

+1

wydaje się, że prywatny dziennik polowy nigdy nie jest używany. –

Powiązane problemy