Vorrei rilevare le mie eccezioni e registrarle nel file di registro di Windows. Come faccio ad aprire e scrivere sul log di Windows?Scrittura di eccezioni nel file di registro di Windows
risposta
È possibile utilizzare la funzione System.Diagnostics.EventLog.WriteEntry per scrivere le voci nel registro eventi.
System.Diagnostics.EventLog.WriteEntry("MyEventSource", exception.StackTrace,
System.Diagnostics.EventLogEntryType.Warning);
Per leggere i log degli eventi è possibile utilizzare la funzione di System.Diagnostics.EventLog.GetEventLogs.
Ecco la risposta semplice a scrivere nel registro eventi: http://support.microsoft.com/kb/307024
Una risposta migliore è quella di usare qualcosa come log4net, che si occuperà per voi.
Windows utilizza il registro eventi per tracciare l'attività. È possibile utilizzare la classe System.Diagnostics.Trace
:
var traceSwitch = new TraceSwitch("MySwitch", "");
var exception = new Exception("Exception message");
if (traceSwitch.TraceError)
{
Trace.TraceError(exception);
}
Ed è possibile utilizzare app.config per istruire il logger in cui scrivere:
<system.diagnostics>
<switches>
<add name="MySwitch" value="Verbose" />
</switches>
<trace autoflush="true">
<listeners>
<add name="EventLogger"
type="System.Diagnostics.EventLogTraceListener"
initializeData="NameOfYourApplication" />
</listeners>
</trace>
</system.diagnostics>
Si può anche considerare l'utilizzo della Enterprise Library. Sembra complicato iniziare, ma una o due ore di gioco pagherà. Config è memorizzato in app.config in modo che tu possa cambiarlo senza ricompilare - questo può essere davvero utile quando hai lo stesso codice seduto su server di test e live con configurazione diversa. Puoi fare molto senza un sacco di codice.
Una cosa bella è che è possibile definire criteri di eccezione in modo che le eccezioni vengano registrate automaticamente. Ecco alcuni codice che potrebbe utilizzare (sto usando 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 linea nel blocco catch sarà rigenerare l'eccezione SE l'ExPol1 definisce. Se ExPol1 è configurato per il rethrow, ExceptionPolicy.HandleException restituirà true. In caso contrario, restituisce false.
Si definisce il resto in config. L'XML sembra piuttosto orribile (non lo è sempre) ma lo si crea usando l'editor di configurazione della libreria aziendale. Lo sto solo fornendo per completezza.
Nella sezione loggingConfiguration, questo file definisce
- registro: un file di log di testo rotolamento (è possibile utilizzare il costruito nel log di eventi di Windows, tabelle SQL, e-mail, MSMQ e altri), con
- un formattatore di testo che governa come i parametri vengono scritti nel registro (a volte devo configurare questo per scrivere tutto a una riga, altre volte sparsi in molti),
- una singola categoria "Generale"
- una fonte speciale che le trappole eventuali errori nel config/entlib e pronti contro termine li anche loro. Ti consiglio vivamente di farlo.
Nella sezione ExceptionHandling, esso definisce
- un'unica politica: "ExPo1", che gestisce digitare ArgumentNullExceptions e specifica il postHandlingAction di Nessuno (cioè non rethrow).
- un gestore che registra alla categoria generale (definito sopra)
io non farlo in questo esempio, ma si può anche sostituire un eccezione con un diverso tipo utilizzando un criterio.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<section name="exceptionHandling" type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Configuration.ExceptionHandlingSettings, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</configSections>
<loggingConfiguration name="Logging Application Block" tracingEnabled="true"
defaultCategory="General" logWarningsWhenNoCategoriesMatch="true">
<listeners>
<add fileName="rolling.log" footer="" formatter="Text Formatter"
header="" rollFileExistsBehavior="Overwrite" rollInterval="None"
rollSizeKB="500" timeStampPattern="yyyy-MM-dd" listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.RollingFlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
traceOutputOptions="None" filter="All" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollingFlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
name="Rolling Flat File Trace Listener" />
</listeners>
<formatters>
<add template="Timestamp: {timestamp}; Message: {message}; Category: {category}; Priority: {priority}; EventId: {eventid}; Severity: {severity}; Title:{title}; Machine: {machine}; Application Domain: {appDomain}; Process Id: {processId}; Process Name: {processName}; Win32 Thread Id: {win32ThreadId}; Thread Name: {threadName}; 
 Extended Properties: {dictionary({key} - {value})}"
type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
name="Text Formatter" />
</formatters>
<categorySources>
<add switchValue="All" name="General">
<listeners>
<add name="Rolling Flat File Trace Listener" />
</listeners>
</add>
</categorySources>
<specialSources>
<allEvents switchValue="All" name="All Events" />
<notProcessed switchValue="All" name="Unprocessed Category" />
<errors switchValue="All" name="Logging Errors & Warnings">
<listeners>
<add name="Rolling Flat File Trace Listener" />
</listeners>
</errors>
</specialSources>
</loggingConfiguration>
<exceptionHandling>
<exceptionPolicies>
<add name="ExPol1">
<exceptionTypes>
<add type="System.ArgumentNullException, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
postHandlingAction="None" name="ArgumentNullException">
<exceptionHandlers>
<add logCategory="General" eventId="100" severity="Error" title="Enterprise Library Exception Handling"
formatterType="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.TextExceptionFormatter, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
priority="0" useDefaultLogger="false" type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.LoggingExceptionHandler, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
name="Logging Handler" />
</exceptionHandlers>
</add>
</exceptionTypes>
</add>
</exceptionPolicies>
</exceptionHandling>
</configuration>
Questi articoli spiegano come accedere automaticamente unhanded eccezioni che potrebbero verificarsi:
VB.NET: http://visualbasic.about.com/od/usingvbnet/a/logging.htm
C#: Where to write the functions of ApplicationEvents.vb when converting project to C#
- 1. Scrittura/lettura nel registro eventi di Windows
- 2. Scrittura di eventi nel registro eventi di Windows utilizzando Coldfusion
- 3. Scrittura nel registro eventi di Windows utilizzando Delphi
- 4. Scrittura in file di registro separati
- 5. Registro di scrittura Android sul file
- 6. Scrittura nel registro in un'applicazione C#
- 7. Capybara: traccia delle eccezioni nel registro
- 8. Registro di Windows Problema
- 9. Scrittura% ~ DP0 nel registro utilizzando REG ADD
- 10. Autorizzazione negata durante la scrittura del file di registro
- 11. Cosa scrivere nel file di registro?
- 12. Oggetto di scrittura C# nel file binario
- 13. Variabili di scrittura Ansible nel file YAML
- 14. scrittura del file di riga di comando nel file
- 15. Come si hanno file di registro condivisi in Windows?
- 16. Errore durante la scrittura del file di registro con RavenDB Embedded in Windows Azure
- 17. Come aggiungere correttamente associazioni di file al registro di Windows?
- 18. Esistono file di registro sullo stato di Windows Services?
- 19. VS2010: registro di generazione minimo in uscita e file di registro dettagliato nel registro
- 20. Laravel 5 permesso negato durante la scrittura nel file di registro
- 21. Impossibile impostare DefaultIcon nel Registro di sistema
- 22. Registrazione server - nel database o nel file di registro?
- 23. Come ottenere i permessi di scrittura del registro in C#
- 24. (java) di scrittura nel file di little endian
- 25. problema di scrittura di un NSMutableArray su file nel cacao
- 26. Accesso al registro di Windows tramite .NET?
- 27. Scrittura di file transazionale in C# e Windows?
- 28. Quando accedere al registro eventi di Windows?
- 29. Come aprire il registro di Windows con accesso in scrittura in Python
- 30. Come integrare NLog per scrivere il registro nel registro di streaming di Azure
Non è forse un po 'scortese a -1 qualcosa senza spiegare? Che cosa ho fatto di sbagliato? – serialhobbyist