2009-09-08 5 views
27

Je me demandais juste pourquoi il n'y a pas de trace level dans log4Net. Ce niveau semble manquer et je ressens parfois le besoin de l'utiliser, par exemple pour afficher les événements en cours d'exécution dans une application. Cette fonctionnalité est un part of log4J.Pourquoi n'y a-t-il pas un niveau de trace dans log4Net?

Je sais que je peux créer un niveau personnalisé comme on en parle here mais je ne veux pas mettre du temps et des efforts dans quelque chose que je pense devrait faire partie de la bibliothèque elle-même. Connaissez-vous une bibliothèque d'extension log4net qui implémente ceci ou pourquoi cela ne faisait pas partie du port de .net?

Répondre

9

L'interface log4net.ILog expose uniquement les méthodes et propriétés fatale, erreur, avertissez, niveaux Informations et débogage.

Je suis d'accord c'est un peu limitant, et aimerait voir un niveau de plus là-dedans. Mais alors le nombre optimal de niveaux est probablement "un de plus que le nombre actuel de niveaux" - vous vous trouverez toujours vouloir un niveau de plus.

+1

Ouais je suis d'accord, vous êtes probablement encore avec vouloir plus. Chose étrange, ils ont quitté TRACE hors de l'interface ILog car il est disponible dans le SDK comme nous l'avons souligné dans sa réponse – armannvg

+3

Je suppose qu'il a été ajouté au SDK après la conception de l'interface ILog. – Joe

46

Vous pouvez ajouter un verbeux (ou un niveau de trace) à log4net en utilisant des méthodes d'extension. C'est ce que j'utilise:

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

} 

Exemple d'utilisation:

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

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

Source:

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

+0

Est-il possible d'obtenir un indicateur IsTraceEnabled à interroger si le niveau TRACE est activé dans la journalisation? – galmok

+0

Peu importe, les propriétés d'extension n'existent pas encore. Il doit être une méthode d'extension semble-t-il. – galmok

+1

il semble que le journal du champ privé n'est jamais utilisé. –

Questions connexes