70 votes

log4net versus TraceSource

Dans ce fil de nombreuses personnes ont indiqué qu'ils utilisent log4net. Je suis un fan de TraceSources et voudrais savoir pourquoi log4net est utilisé.

Voici pourquoi j'aime trace sources:

  • Enfichable auditeurs - XML, fichier Texte, Console, Journal des événements, rouler votre propre
  • Personnalisable trace des commutateurs (error, warning, info, en clair, de début, de fin, personnalisé)
  • Configuration personnalisable
  • L'Application d'enregistrement de Bloc est juste un grand jeu de TraceListeners
  • La corrélation de l'activité étendues (par exemple, associer tous les journaux à l'intérieur d'un ASP.NET demande à un client donné
  • Le Service de Trace Viewer vous permet de visualiser les événements à l'encontre de ces activités individuellement
  • Le tout est configurable via l'application.config/web.config.

Depuis l' .NET framework utilise en interne TraceSources, il me donne aussi une manière cohérente de la configuration de la traçabilité - avec log4net, j'ai configurer log4net ainsi que TraceSources.

Ce n'log4net me donner que TraceSources ne pas (ou qui ne pouvait pas être fait par la rédaction d'un couple de la coutume TraceListeners)?

56voto

Sly Points 2992

Dans les tout premiers jours (.NET 1.0) suivi dans l' .NET Framework a été assez limité.

Par exemple TraceSource de partitionnement n'est pas venu jusqu'à .NET 2.0 et vous n'avez eu que quatre niveaux (Erreur, Avertissement, Information, Commentaires), bien que vous pourriez utiliser une demi-douzaine de booléenne commutateurs pour le partitionnement si vous le souhaitez.

log4j est populaire en Java et j'ai obtenu beaucoup de soutien pour une .Port NET, et une fois qu'il est devenu populaire, il est resté de cette façon, même si les gens n'ont même pas l'utiliser correctement (par exemple, en l'enveloppant dans un singleton enregistreur et de perdre son atout principal).

Encore, je pense que log4net et d'autres cadres (par exemple, NLog, Commun.L'exploitation forestière, et même EntLib) est allé le mauvais sens par la mise en œuvre de leur propre système d'enregistrement à partir du sol, c'est à dire de changer la façon dont vous écrivez les instructions de journalisation en premier lieu.

J'aurais largement préféré voir l'effort, surtout depuis .NET 2.0, mettre l'élargissement de la base solide de ce qui est déjà dans le .NET. Pour un projet qui n'est d'étendre ce qui existe déjà, avoir un regard sur l'Essentiel des Diagnostics projet sur CodePlex (http://essentialdiagnostics.codeplex.com/).

Quelques points forts de log4net:

  • Il est semblable à log4j, si vous exécutez un environnement mixte et souhaitez cohérente de l'exploitation forestière.

  • Automatique de l'enregistreur de hiérarchie qui hérite des paramètres est assez nette, par rapport à de nombreuses sources de suivi mettre en oeuvre et configurer chaque. (bien que probablement excessif dans certains cas).

  • log4net a déjà près de 28 appenders (équivalent à la trace les auditeurs), alors que le Système.Diagnostic a 10 (mais voir l'Essentiel.Les Diagnostics de projet pour en savoir plus), donc si vous pensez vraiment que vous pouvez avoir besoin de l'RemoteSyslogAppender, NetSendAppender, AnsiColorTerminalAppender ou TelnetAppender, alors vous avez de la chance.

Inconvénients (par rapport au Système.Diagnostics):

  • Vous devez utiliser la journalisation différente de la syntaxe, donc si vous êtes déjà à l'aide de la source.TraceEvent(), vous devez aller à travers et tout remplacer.

  • Cela s'étend aussi à une autre syntaxe pour la corrélation, si vous avez besoin de changer de CorrelationManager de log4net contextes.

  • Ne pas intégrer facilement avec le Cadre de recherches (par exemple, WCF).

  • Le soutien des pauvres pour l'ID d'Événement (nécessité d'utiliser un projet d'extension de la IEventLog).

  • N'est pas encore en charge le suivi d'Événements pour Windows (Vista), ou la Visionneuse de Trace de Service format XML.

9voto

Mike Bonnell Points 165

Je pense que log4net est en train de faire tout ce que vous répertoriées pour moi.

Enfichable auditeurs sonne comme appenders - il y en a beaucoup et en fait j'ai même piraté les rolling fichier journal pour toujours à la fin .journaux (pour des associations de fichiers), ajout d'un champ cc pour l'e-mail appender, et finalement, à l'écoute de mes préférés valeurs de la couleur de la console appender. Si j'ai peut-être l'audace de - ma de couleur de la console de bonheur:

<appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
<!-- Can Use:
		Blue
		Green
		Red
		White
		Yellow
		Purple
		Cyan
		HighIntensity
		-->
<mapping>
  <level value="FATAL" />
  <foreColor value="Yellow, HighIntensity" />
  <backColor value="Red" />
</mapping>
<mapping>
  <level value="ERROR" />
  <foreColor value="White" />
  <backColor value="Purple, HighIntensity" />
</mapping>
<mapping>
  <level value="WARN" />
  <backColor value="Blue" />
  <foreColor value="White" />
</mapping>
<mapping>
  <level value="INFO" />
  <backColor value="Green" />
  <foreColor value="White" />
</mapping>
<mapping>
  <level value="DEBUG" />
  <foreColor value="White" />
</mapping>
<layout type="log4net.Layout.PatternLayout">
  <!--<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />-->
  <!--<conversionPattern value="%-5level %file:%line - %message%newline" />-->
  <conversionPattern value="%level %logger:%line %newline     %message%newline" />
</layout>

Personnalisable trace de commutateurs: Log4net est livré uniquement avec ERREUR FATALE AVERTIR les INFOS de DEBUG dans le but d'augmenter le niveau de verbosité. Le seul que j'ai réellement manquer de VÉRIFICATION pour qui-fait-ce que l'exploitation forestière.

Personnalisable configuration: j'ai utiliser un log4net.fichier de config qui je charge au moment de l'exécution (ou d'écrire un journal sur c:\ pleurnicher que je ne trouve pas le fichier config.)

    Try
        ' Get log4net configuration from file
        Dim logConfigFile As FileInfo
        logConfigFile = New FileInfo(".\log4net.config")

        If logConfigFile.Exists Then
            XmlConfigurator.Configure(logConfigFile)
        Else
            CreateEmergenceLogFile(logConfigFile.FullName)
        End If

    Catch ex As Exception
        Console.Out.WriteLine("Could not load the log4net config file")
    End Try

juste un grand ensemble de TraceListeners: désolé ignorant que je vais prendre votre parole.

La corrélation des activités/domaines d'application: voulez-vous dire comme à chaque fichier (lire en classe) obtient son propre nommé journal qui peut avoir séparé le niveau de journal des seuils. En fait, vous pouvez segment de la journalisation même dans une seule classe (qui en vérité ont augmenté de trop en faire ...)

Dans un fichier de classe:

    Private Shared _logger As log4net.ILog = _
log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)

Private Shared _loggerAttribute As log4net.ILog = _
log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName & ".Attribute")

Private Shared _loggerCache As log4net.ILog = _
log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName & ".Cache")

La Visionneuse de Trace de Service: dans le log4net.config:

  <logger name="NipissingU.ADWrapper.EntryTools.Attribute">
    <level value="INFO" />
  </logger>
  <logger name="NipissingU.ADWrapper.EntryTools.Cache">
    <level value="WARN" />
  </logger>

Le tout est configurable via l'application.config/web.config: bien, peut-être que c'est une bonne chose en ASP.NET je ne sais pas, mais lors de la prise de client riche bean comptage des applications que j'aime séparé fichier de configuration.

Tout ici n'est que ma propre petite astuces d'utilisation.

hth, -Mike

4voto

Mogerli Points 31

Une autre raison pour l'utilisation de TraceSources au lieu de Log4Net est suivi lui-même: Log4Net ne peut être utilisé pour l'enregistrement (les messages) mais comment tracer un Objet (une multitude d'informations en même temps)? Bien sûr, Log4Net a beaucoup d'Auditeurs implementd, mais ai-je besoin de tous ces? Dans la plupart des cas, non. Et si j'ai besoin d'une spéciale à l'écoute, ce n'est pas aussi dur de ne mettre en œuvre la mienne, n'est-ce pas? Par exemple, j'devez à un auditeur de trace dans une base de données (non seulement des messages, mais différentes informations {string s, int, etc.} dans le même temps).

Je suis de droite?

3voto

Bevan Points 20976

La raison que je préfère Log4Net à l'aide de Trace de ciblage - avec Log4Net, je peux indépendamment de l'instrument de différentes couches de mon application (Accès aux Données, de Services, de la Logique d'Entreprise, etc) et les différents sous-systèmes (Authentification, la Transformation, etc) et activer/désactiver la journalisation de chaque sous-système de façon indépendante.

Cette possibilité me permet de configurer la journalisation détaillée pour un sous-système, sans avoir à allumer le firehose pour l'ensemble du système.

Les méthodes statiques fournis sur la Trace de la classe [comme TraceInformation()] ne fournit aucun moyen de spécifier le sous-système de l'enregistrement est de partir, si ce n'est pas quelque chose de facilement fournis par l'écriture de mes propres TraceListener.

Une autre raison est la performance il y a des morceau de mon application potentiellement journal de plusieurs milliers de messages par seconde. Log4Net impose une faible surcharge. En revanche, la dernière fois que je l'ai regardé, L'Application d'enregistrement de bloc réanalysée sa configuration XML pour chaque message enregistré, en faisant le bloc très lourd et lent.

0voto

Jim Burger Points 3166

Alors que je suis seulement au courant de la façon dont log4net fonctionne, ce qui est évident bonus à l'aide de ce cadre est immédiate familiarité ceux qui sont habitués à l'utilisation de log4j.

Un autre petit avantage est que l'épreuve de conduite de journalisation à l'aide de log4net est extrêmement simple; enregistreurs de mettre en œuvre log4net.ILog. De nouveau je ne suis pas familier avec la solution de Microsoft, mais Im me demandais comment on pourrait le faire sans d'abord l'écriture d'une façade pour le Système.Diagnostics.Classe de Trace.

Avec un coup d'oeil sur la trace des sources de documentation, je ne pouvais pas trouver un équivalent pour les mises en page, et serais intéressé de savoir si un équivalent existe. Le PatternLayout est très pratique pour la mise en forme des entrées de journal avec des données communes comme les timbres à date, fil info, le journal du contexte etc. Log4net PatternLayout docs: http://logging.apache.org/log4net/release/sdk/log4net.Layout.PatternLayout.html

En outre, étant donné que le fait d'écrire des extensions de journalisation est sans doute un classique de la "méta-problème", log4net apporte une grande liste de enfichables auditeur équivalents à la table.

Liste des appenders: http://logging.apache.org/log4net/release/config-examples.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X