Bei Exception die Message in Datei schreiben

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Bei Exception die Message in Datei schreiben

    Moin Moin!

    Und zwar ist das hier mein Problem:
    Ich will dass jede Exception(egal ob behandelt oder unbehandelt) in eine Datei geschrieben wird(per StreamWriter).

    Bisher war das mein Code(in der ApplicationEvents.vb):

    VB.NET-Quellcode

    1. Private Sub MyApplication_UnhandledException(ByVal sender As Object,_
    2. ByVal e As Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs) Handles MyBase.UnhandledException
    3. Dim jpi As New StreamWriter("C:\Users\Mirco\Desktop\ho.txt")
    4. jpi.WriteLine(e.Exception.Message)
    5. jpi.Close()
    6. End
    7. End Sub


    Aber irgentwie funktioniert das nicht. Könnt ihr mir helfen? ;(
    Wäre wichtig!

    Mircosofter
    Wie "funktionier nicht"? Bitte genauere Fehlerbeschreibung.

    Ich gege mal davon aus, dass die Logdatei nicht erstellt wird.
    was du machen kannst, ist folgendes:
    Pack in jeden Try Catch Block am Ende ein Finally und machst da dann dein Logging.

    Tipp: für ein einfaches wegschreiben der Fehlermeldung brauchst du kicht aufwändig einen StreamWriter erstellen. Hier würde es reichen mit der System.IO.File-Klasse per File.Write(String, String) msdn.microsoft.com/de-de/library/ms143375(v=vs.110).aspx oder File.Write(String, String, Encoding) msdn.microsoft.com/de-de/library/ms143376(v=vs.110).aspx

    Als Dateinamen würd ich Date.Now.toString() verwenden

    Lg Radinator
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    @Radinator Jou.
    @Mircosofter2206 Jede Exception eine eigene Datei, mach Dir dazu neben der Exe ein passendes Unterverzeichnis.
    Das wichtigste ist der StackTrace, anhand dessen kannst Du den Aufruf und dessen History rekonstruieren.
    Eine behandelte Exception kommt da nicht vorbei, denn die Exception wird ja lokal abgefangen. Dann müsstest Du explizit diesen Code aufrufen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Mircosofter2206 schrieb:

    platzsparendere Methode
    wofür jetzt genau?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Mircosofter2206 schrieb:

    Gäbe es auch eine platzsparendere Methode?
    Du könntest ev. eine Extension machen...

    VB.NET-Quellcode

    1. Imports System.Runtime.CompilerServices
    2. Imports System.IO
    3. Module ErrorExtensions
    4. <Extension(), DebuggerStepThrough()> _
    5. Public Sub SaveErrorMessage(ex As Exception)
    6. Dim dir = Path.Combine(Application.StartupPath, "ErrorLogging")
    7. Dim di = New DirectoryInfo(dir)
    8. If Not di.Exists Then di.Create()
    9. Dim fi As New FileInfo(Path.Combine(dir, String.Concat("Error-", Date.Now.ToFileTime.ToString, ".log")))
    10. Using outfile As New StreamWriter(fi.FullName)
    11. outfile.Write(ex.ToString())
    12. End Using
    13. End Sub
    14. End Module
    und rufst dann folgend auf:

    VB.NET-Quellcode

    1. ex.SaveErrorMessage()

    Nils_Kr schrieb:

    Fehlermeldungen außerhalb von Try-Catch Blöcken
    Da gibt es den MyApplication_UnhandledException-Handler in den MyApplication-Events.
    Bei Verwendung von Threads sollte noch das Application.ThreadException-Event aboniert werden.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Da gibt es den MyApplication_UnhandledException-Handler in den MyApplication-Events.



    Genau DAS hab ich doch oben schon probiert, geht aber nicht ;)
    Das Event wird irgentwie nie ausgelöst. Ich habs probiert mit

    VB.NET-Quellcode

    1. ​Throw New Exception("Irgenteine Exception")

    Oder hab ich einen Denkfehler????

    Mircosofter

    Mircosofter2206 schrieb:

    geht aber nicht
    In VB ist das ein bissel anders, insbesondere, wenn das Anwendungsframework aktiviert ist (per default):

    Klick da mal auf Anwendungsereignisse anzeigen, dann in die leefre Klasse, dann oben links auf MyApplication-Ereignisse und rechts auf UnhandledException, da wird der entsprechende Exceptionhandler generiert:

    VB.NET-Quellcode

    1. Private Sub MyApplication_UnhandledException(sender As Object, e As ApplicationServices.UnhandledExceptionEventArgs) Handles Me.UnhandledException
    2. 'MessageBox.Show(e.Exception.Message)
    3. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!