Erreur lors de la connexion en C #

Je passe de la programmation en C ++ à C #. Je dois remplacer mon système de macros / rapports d’erreur C ++ par quelque chose de similaire dans C #.

Dans ma source C ++ je peux écrire

LOGERR (“Une erreur”); ou LOGERR (“Erreur avec les entrées% s et% d”, ssortingngvar, intvar);

La macro et le code de la bibliothèque associée transmettent ensuite le message (éventuellement varargs) formaté dans une firebase database avec le fichier source, la ligne source, le nom d’utilisateur et l’heure. Les mêmes données sont également stockées dans une structure de données pour un rapport ultérieur à l’utilisateur.

Quelqu’un at-il des extraits de code ou des pointeurs de code C # vers des exemples qui font ce rapport / journalisation d’erreur de base?

Edit: Au moment où j’ai posé cette question, j’étais vraiment nouveau sur .NET et je n’étais pas au courant de System.Diagnostics.Trace. System.Diagnostics.Trace était ce dont j’avais besoin à ce moment-là. Depuis lors, j’ai utilisé log4net sur des projets où les exigences de journalisation étaient plus importantes et plus complexes. Modifiez simplement ce fichier de configuration XML de 500 lignes et log4net fera tout ce dont vous aurez besoin 🙂

Beaucoup de log4net préconise ici donc je suis sûr que cela sera ignoré, mais j’appendai ma propre préférence:

System.Diagnostics.Trace 

Cela inclut les écouteurs qui écoutent vos méthodes Trace() , puis écrivent dans un journal / une fenêtre de sortie / un journal des événements, ceux qui sont inclus dans la structure sont DefaultTraceListener , TextWriterTraceListener et EventLogTraceListener . Il vous permet de spécifier des niveaux (Avertissement, Erreur, Info) et des catégories.

Classe de trace sur MSDN
Écrire dans le journal des événements dans une application Web
UdpTraceListener – Ecrit des messages XML compatibles log4net sur un visualiseur de journal tel que log2console

Je recommande fortement de consulter log4Net . Ce post couvre la majorité de ce dont vous avez besoin pour commencer.

NLog est une autre bonne bibliothèque de journalisation , qui peut se connecter à de nombreux endroits différents, tels que des fichiers, des bases de données, un journal d’événements, etc.

J’utilise The Object Guy’s Logging Framework – comme la plupart des gens qui l’essaient. Ce gars a des commentaires intéressants à ce sujet.

Enterprise Library est une alternative solide à log4net et offre de nombreuses autres fonctionnalités (mise en cache, gestion des exceptions, validation, etc.). Je l’utilise sur à peu près tous les projets que je construis.

Hautement recommandé.

Même si je déteste personnellement, log4net semble être la norme de facto pour la journalisation en C #. Exemple d’utilisation:

 log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program)); log.Error(“Some error”); log.ErrorFormat("Error with inputs {0} and {1}", ssortingngvar, intvar); 

Comme je l’ai dit dans un autre thread, nous utilisons depuis plusieurs années la structure de journalisation de The Object Guy dans plusieurs applications de production. C’est super facile à utiliser et à étendre.

Log4Net est une structure de journalisation assez complète qui vous permet de vous connecter à différents niveaux (Debug, Error, Fatal) et de publier ces instructions de journal à différents endroits (fichier déroulant, service Web, erreurs Windows).

Je peux facilement me connecter n’importe où en créant une instance de l’enregistreur

 private static readonly ILog _log = LogManager.GetLogger(typeof([Class Name])); 

puis en enregistrant l’erreur.

 _log.Error("Error messsage", ex); 

Serilog est en retard à la fête ici, mais apporte des options intéressantes à la table. Il ressemble beaucoup aux enregistreurs de texte classiques à utiliser:

 Log.Information("Hello, {0}", username); 

Mais, contrairement aux frameworks antérieurs, il ne restitue que le message et les arguments dans une chaîne lors de l’écriture de texte, par exemple dans un fichier ou la console.

L’idée est que si vous utilisez un magasin de données de style «NoSQL» pour les journaux, vous pouvez enregistrer des événements tels que:

 { Timestamp: "2014-02-....", Message: "Hello, nblumhardt", Properties: { "0": "nblumhardt" } } 

La syntaxe de la chaîne de format .NET est étendue afin que vous puissiez écrire l’exemple ci-dessus comme suit:

 Log.Information("Hello, {Name}", username); 

Dans ce cas, la propriété s’appellera Name (plutôt que 0 ), ce qui facilitera les requêtes et la corrélation.

Il y a déjà quelques bonnes options pour le stockage. MongoDB et Azure Table Storage semblent être très populaires pour le bricolage. A l’origine, j’ai créé Serilog (bien qu’il s’agisse d’un projet communautaire) et je travaille actuellement sur un produit appelé Seq , qui fournit le stockage et l’interrogation de ces types d’événements de journaux structurés.

Vous pouvez utiliser la journalisation .NET intégrée. Regardez dans TraceSource et TraceListeners, ils peuvent être configurés dans le fichier .config.

Idem pour log4net. J’ajoute mes deux bits car, pour une utilisation réelle, il est logique de regarder certaines implémentations open source pour voir des exemples de code du monde réel avec des ajouts pratiques. En ce qui concerne log4net, je suggérerais de lire le sous-texte . En particulier, jetez un coup d’oeil aux bits de démarrage et d’assemblyinfo de l’application.

Suite aux quelques commentaires concernant l’utilisation des méthodes System.Diagnostics pour la journalisation, je voudrais également souligner que l’outil DebugView est très pratique pour vérifier les sorties de débogage lorsque cela est nécessaire – à moins que vous en ayez besoin, les applications pour produire un fichier journal, vous venez de lancer DebugView au besoin.

Le traçage intégré dans System.Diagnostics est bien dans le .NET Framework et je l’utilise sur de nombreuses applications. Cependant, l’une des principales raisons pour lesquelles j’utilise encore log4net est que le traçage intégré du .NET Framework ne contient pas beaucoup des appenders complets complets que log4net fournit déjà.

Par exemple, il n’y a pas de programme d’écoute de trace de fichier bien défini dans le .NET Framework, à l’exception de celui qui se trouve dans une DLL VB.NET et qui n’est pas vraiment complet.

En fonction de votre environnement de développement, je vous recommande d’utiliser log4net à moins que des outils tiers ne soient pas disponibles, alors je dirais que vous utilisez les classes de traçage System.Diagnostics. Si vous avez vraiment besoin d’un meilleur appender / tracelistener, vous pouvez toujours l’implémenter vous-même.

Par exemple, beaucoup de nos clients exigent que nous n’utilisions pas les bibliothèques open source lorsqu’elles sont installées sur leurs ordinateurs d’entreprise. Dans ce cas, les classes de suivi du .NET Framework sont parfaitement adaptées.

En outre – http://www.postsharp.org/ est une bibliothèque AOP que je recherche et qui peut également aider à la journalisation, comme illustré ici sur le projet de code: http://www.codeproject.com/KB/dotnet/log4postsharp- intro.aspx .

ExceptionLess est l’un des packages nuget les plus faciles à utiliser pour la journalisation. C’est un projet open source . Il prend automatiquement en charge les exceptions non gérées et les options pour les journaux manuellement sont disponibles. Vous pouvez vous connecter en ligne ou vous héberger sur le serveur local.

Log4Net, comme d’autres l’ont dit, est assez commun et similaire à Log4j, ce qui vous aidera si vous faites du Java.

Vous avez également la possibilité d’utiliser le bloc d’application de journalisation http://www.codeproject.com/KB/architecture/GetStartedLoggingBlock.aspx