Écrire des exceptions dans le fichier journal Windows

Je voudrais attraper mes exceptions et les enregistrer dans le fichier journal Windows. Comment puis-je ouvrir et écrire dans le journal Windows?

Vous pouvez utiliser la fonction System.Diagnostics.EventLog.WriteEntry pour écrire des entrées dans le journal des événements.

System.Diagnostics.EventLog.WriteEntry("MyEventSource", exception.StackTrace, System.Diagnostics.EventLogEntryType.Warning); 

Pour lire les journaux des événements, vous pouvez utiliser la fonction System.Diagnostics.EventLog.GetEventLogs .

 //here's how you get the event logs var eventLogs = System.Diagnostics.EventLog.GetEventLogs(); foreach(var eventLog in eventLogs) { //here's how you get the event log ensortinges foreach(var logEntry in eventLog.Ensortinges) { //do something with the entry } } 

Vous pouvez également envisager d’utiliser la bibliothèque d’entreprise . Cela semble compliqué de commencer, mais une heure ou deux de jeu seront payants. Config est stocké dans app.config afin que vous puissiez le changer sans recomstackr – cela peut être très pratique lorsque vous avez le même code assis sur le test et les serveurs en direct avec différentes config. Vous pouvez faire beaucoup de choses sans trop de code.

Une bonne chose est que vous pouvez définir des stratégies d’exception pour que les exceptions soient automatiquement consignées. Voici un code que vous pourriez utiliser (j’utilise EntLib 4.1):

  try { //This would be where your exception might be thrown. I'm doing it on //purpose so you can see it work throw new ArgumentNullException("param1"); } catch (Exception ex) { if (ExceptionPolicy.HandleException(ex, "ExPol1")) throw; } 

La ligne du bloc catch renverra l’exception SI l’ExPol1 le définit. Si ExPol1 est configuré pour retransmission, ExceptionPolicy.HandleException renvoie true. Sinon, il retourne faux.

Vous définissez le rest dans la configuration. Le XML a l’air assez horrible (n’est-ce pas toujours le cas), mais vous le créez à l’aide de l’éditeur Enterprise Library Configuration. Je ne fais que le fournir pour être complet.

Dans la section loggingConfiguration, ce fichier définit

  • le journal: un fichier journal texte continu (vous pouvez utiliser les journaux d’événements Windows intégrés, les tables sql, le courrier électronique, msmq et autres), avec
  • un formateur de texte qui régit la façon dont les parameters sont écrits dans le journal (parfois, je le configure pour écrire tout sur une ligne, d’autres fois sur plusieurs),
  • une seule catégorie “Général”
  • une source spéciale qui détecte les erreurs dans config / entlib et les signale également. Je vous conseille fortement de le faire.

Dans la section exceptionHandling, il définit

  • une seule politique: “ExPo1”, qui gère le type ArgumentNullExceptions et spécifie la postHandlingAction de None (c.-à-d. ne pas renvoyer).
  • un gestionnaire qui se connecte à la catégorie générale (définie ci-dessus)

Je ne le fais pas dans cet exemple, mais vous pouvez également remplacer une exception par un type différent en utilisant une stratégie.

     

Windows utilise le journal des événements pour suivre l’activité. Vous pouvez utiliser la classe System.Diagnostics.Trace :

 var traceSwitch = new TraceSwitch("MySwitch", ""); var exception = new Exception("Exception message"); if (traceSwitch.TraceError) { Trace.TraceError(exception); } 

Et vous pouvez utiliser app.config pour indiquer à l’enregistreur où écrire:

           

Voici la réponse simple à l’écriture dans le journal des événements: http://support.microsoft.com/kb/307024

Une meilleure réponse consiste à utiliser quelque chose comme log4net , qui gérera cela pour vous.

Ces articles expliquent comment enregistrer automatiquement les exceptions non sockets en charge susceptibles de se produire:

VB.NET: http://visualbasic.about.com/od/usingvbnet/a/logging.htm

C #: Où écrire les fonctions de ApplicationEvents.vb lors de la conversion du projet en C #