Question

Je suis en train de passer du codage en C ++ à C #. Je dois remplacer mon système de macro de journalisation / rapport d'erreurs C ++ par un système similaire en C #.

Je peux écrire dans ma source C ++

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

La macro & amp; le code de bibliothèque de support passe 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 intégrées dans une structure de données pour être ensuite transmises à l'utilisateur.

Quelqu'un a-t-il des extraits de code C # ou des pointeurs sur des exemples de ce rapport / enregistrement de base des erreurs?

Modifier: À l'époque où je posais cette question, j'étais vraiment nouveau dans .NET et je n'étais pas au courant de System.Diagnostics.Trace. System.Diagnostics.Trace était ce dont j'avais besoin à cette é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:)

Était-ce utile?

La solution

De nombreux avocats de log4net sont ici, alors je suis sûr que cela ne sera pas pris en compte, mais j'ajouterai ma propre préférence:

System.Diagnostics.Trace

Cela inclut les écouteurs écoutant vos méthodes Trace () , puis écrivant dans un fichier journal / une fenêtre de sortie / un journal d'événements. Ceux-ci inclus dans la structure sont DefaultTraceListener , TextWriterTraceListener et le EventLogTraceListener . Il vous permet de spécifier des niveaux (Avertissement, Erreur, Informations) et des catégories.

Classe de trace sur MSDN
Écriture dans le journal des événements dans une application Web
tel que log2console

Autres conseils

Je recommanderais vivement de consulter log4Net . Ce post couvre la majorité de ce dont vous avez besoin pour obtenir commencé.

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

J'utilise la structure de journalisation du type d'objet - comme le font la plupart des personnes qui l'essaient. Ce mec a des commentaires intéressants à ce sujet.

La

bibliothèque Enterprise est une solide alternative à log4net et offre également 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.

Fortement recommandé.

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

Comme je l'ai dit dans un autre fil de discussion, nous utilisons la structure de journalisation de l'utilisateur type dans plusieurs applications de production pendant plusieurs années. C'est très facile à utiliser et à étendre.

Log4Net est un cadre de journalisation assez complet qui vous permettra de vous connecter à différents niveaux (Debug , Erreur, Fatal) et générez ces instructions de journal dans différents endroits (fichier glissant, service Web, erreurs Windows)

Je peux facilement me connecter n’importe où en créant une instance du consignateur

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

puis en enregistrant l'erreur.

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

Serilog est en retard pour la fête ici, mais apporte quelques options intéressantes à la table. Cela ressemble beaucoup aux enregistreurs classiques basés sur du texte à utiliser:

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

Mais contrairement aux frameworks précédents, il ne fait que rendre le message et les arguments sous forme de chaîne lors de l'écriture de texte, par ex. dans un fichier ou la console.

L'idée est que si vous utilisez un magasin de données de type "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 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é sera appelée Nom (plutôt que 0 ), facilitant ainsi 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. A l'origine, j'ai construit Serilog (bien qu'il s'agisse d'un projet communautaire) et je travaille maintenant sur un produit appelé Seq , qui fournit du stockage. et l'interrogation de ces types d'événements de journal 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 d'examiner certaines implémentations open source afin de voir des exemples de code du monde réel avec des ajouts pratiques. Pour log4net, je vous suggérerais de regarder d'emblée le sous-texte . En particulier, jetez un coup d’œil aux bits de démarrage et d’assemblageinfo de l’application.

Suite aux quelques commentaires relatifs à l'utilisation des méthodes System.Diagnostics pour la journalisation, je tiens également à souligner que le DebugView est très utile pour vérifier la sortie du débogage lorsque vous en avez besoin - à moins que vous n'en ayez besoin, les applications ne doivent pas générer de fichier journal, vous devez simplement lancer DebugView selon les besoins.

Le traçage intégré dans System.Diagnostics convient parfaitement au .NET Framework et je l’utilise dans de nombreuses applications. Cependant, l'une des principales raisons pour lesquelles j'utilise encore log4net est que le traçage .NET Framework intégré manque de nombreux ajouts utiles utiles que log4net fournit déjà.

Par exemple, il n’existe pas vraiment de bon écouteur de trace de fichier défilant défini dans le .NET Framework, à part celui d’une dll VB.NET qui n’a pas toutes les fonctionnalités.

En fonction de votre environnement de développement, nous vous recommandons d'utiliser log4net sauf si des outils tiers ne sont pas disponibles. Dans ce cas, utilisez les classes de traçage System.Diagnostics. Si vous avez vraiment besoin d'un meilleur correcteur / correcteur, vous pouvez toujours le mettre en œuvre vous-même.

Par exemple, bon nombre de nos clients nous demandent de ne pas utiliser de bibliothèques open source lorsqu’ils sont installés sur leurs ordinateurs d’entreprise. Dans ce cas, les classes de traçage .NET Framework conviennent parfaitement.

De plus, la http://www.postsharp.org/ est une bibliothèque AOP que je recherche Ceci peut également aider à la journalisation, comme indiqué dans le projet de code: http: // www.codeproject.com/KB/dotnet/log4postsharp-intro.aspx .

ExceptionLess est l'un des paquets de nugets les plus simples à utiliser pour la journalisation. C’est un projet open source . Il gère automatiquement les exceptions non gérées et des options pour les journaux manuellement sont disponibles. . Vous pouvez vous connecter à hôte autonome en ligne sur le serveur local.

Log4Net, comme d’autres l'ont déjà dit, est assez commun et similaire à Log4j, ce qui vous aidera si vous utilisez Java.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top