web-dev-qa-db-fra.com

Erreur de connexion en C #

Je passe de coder en C++ à C #. J'ai besoin de remplacer mon système de macro de journalisation/rapport d'erreurs C++ par quelque chose de similaire en C #.

Dans ma source C++ je peux écrire

LOGERR ("Une erreur"); ou LOGERR ("Erreur avec les entrées% s et% d", stringvar, intvar);

La macro et le code de bibliothèque de support passent ensuite le message formaté (éventuellement varargs) dans une base de données avec le fichier source, la ligne source, le nom d'utilisateur et l'heure. Les mêmes données sont également insérées dans une structure de données pour un rapport ultérieur à l'utilisateur.

Quelqu'un a-t-il des extraits de code C # ou des pointeurs vers des exemples qui effectuent ce rapport/journal d'erreurs de base?

Edit: Au moment où j'ai posé cette question, j'étais vraiment nouveau sur .NET et ignorais System.Diagnostics.Trace. System.Diagnostics.Trace était ce dont j'avais besoin à l'époque. Depuis lors, j'ai utilisé log4net sur des projets où les exigences de journalisation étaient plus grandes et plus complexes. Modifiez simplement ce fichier de configuration XML de 500 lignes et log4net fera tout ce dont vous aurez besoin :)

73
Rodney Schuler

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

System.Diagnostics.Trace

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

classe de trace sur MSDN
Écriture dans le journal des événements dans une application Web
dpTraceListener - écrire des messages XML compatibles log4net dans une visionneuse de journaux telle que log2console

72
Chris S

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

41
Mitch Wheat

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

15
Mats Fredriksson

J'utilise le cadre de journalisation d'Object Guy - comme le font la plupart des gens qui l'essaient. Ce gars a des commentaires intéressants à ce sujet.

14
TheRaven

Enterprise Library est une alternative solide à log4net et offre également un tas d'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é.

11
Eric Schoonover

Comme je l'ai dit dans un autre fil, nous utilisons The Object Guy's Logging Framework dans plusieurs applications de production depuis plusieurs années. C'est super facile à utiliser et à étendre.

5
S. Mills

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

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

Serilog est en retard à la fête ici, mais apporte quelques 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 rend uniquement le message et les arguments dans une chaîne lors de l'écriture de texte, par exemple vers 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 chaîne au format .NET est étendue afin que vous puissiez écrire l'exemple ci-dessus comme:

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

Dans ce cas, la propriété sera appelée Name (plutôt que 0), facilitant l'interrogation et la corrélation.

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

3
Nicholas Blumhardt

Log4Net est un cadre de journalisation assez complet qui vous permettra de vous connecter à différents niveaux (débogage, erreur, fatal) et de sortir ces instructions de journal à différents endroits (fichier 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);
3
FryHard

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

2
CSharpAtl

Suite aux quelques commentaires relatifs à 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 la sortie de débogage en cas de besoin - sauf si vous en avez besoin , il n'est pas nécessaire que les applications produisent un fichier journal, vous lancez simplement DebugView au fur et à mesure des besoins.

1
Chris Ballard

ExceptionLess est l'un des paquets de pépites 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 des options pour journaux manuellement sont disponibles. Vous pouvez vous connecter en ligne ou self Host sur le serveur local.

1
gmsi

Le traçage intégré dans System.Diagnostics est correct dans le .NET Framework et je l'utilise sur de nombreuses applications. Cependant, l'une des principales raisons pour lesquelles j'utilise toujours log4net est que le suivi intégré de .NET Framework manque de nombreux appendeurs complets utiles que log4net fournit déjà.

Par exemple, il n'y a vraiment pas un bon écouteur de trace de fichier roulant défini dans le .NET Framework autre que celui d'une DLL VB.NET qui n'est vraiment pas très complet.

Selon votre environnement de développement, je recommanderais d'utiliser log4net à moins que des outils tiers ne soient pas disponibles, alors je dirais d'utiliser les classes de suivi 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 de bibliothèques open source lorsqu'elles sont installées sur leurs machines d'entreprise, dans ce cas, les classes de traçage .NET Framework conviennent parfaitement.

De plus - http://www.postsharp.org/ est une bibliothèque AOP que j'examine et qui peut également aider à la journalisation, comme illustré ici sur le projet de code: http: // www .codeproject.com/KB/dotnet/log4postsharp-intro.aspx .

1
Wil P

Idem pour log4net. J'ajoute mes deux bits parce que 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 quelques ajouts pratiques. Pour log4net, je suggérerais du haut de ma tête en regardant sous-texte . Jetez un œil en particulier aux bits de démarrage d'application et d'assemblyinfo.

1
Ted

Log4Net, comme d'autres l'ont dit, est assez courant 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

0
Mario