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
Dans la section exceptionHandling, il définit
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 #