Nabend zusammen,
Habe meinen Event/Exception-Logger fertig.
Nun bitte ich mal um Feedback, was ich ggf anders / besser machen könnte.
Das LogFile:
[Info] 10.01.2024 20:26:41
Mitteilung für den Info_Level
[Critical] 10.01.2024 20:26:41
Mitteilung für den Critical-Level
[Failure] 10.01.2024 20:26:42
Die arithmetische Operation hat einen Überlauf verursacht.
Spoiler anzeigen
Habe meinen Event/Exception-Logger fertig.
Nun bitte ich mal um Feedback, was ich ggf anders / besser machen könnte.
Das LogFile:
[Info] 10.01.2024 20:26:41
Mitteilung für den Info_Level
[Critical] 10.01.2024 20:26:41
Mitteilung für den Critical-Level
[Failure] 10.01.2024 20:26:42
Die arithmetische Operation hat einen Überlauf verursacht.
Auf dem Main:
Die Logger-Class:
Auf dem Main:
VB.NET-Quellcode
-
- Public Class FrmMain
- Private Logger As EventReportLogger ' Deklaration der Logger-Instanz
- Public Sub New()
- InitializeComponent()
- Logger = New EventReportLogger() ' Initialisierung der Logger-Instanz im Konstruktor
- End Sub
- Private Sub FrmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- ' Der Level ab wann ins LogFile eingetragen wird
- Logger.MinLogLevel = LogLevel.Info
- ' Eine einfache Message für Infos
- Logger.AddLogEntry(LogLevel.Info, "Mitteilung für den Info_Level")
- Logger.AddLogEntry(LogLevel.Critical, "Mitteilung für den Critical-Level")
- End Sub
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- ' Ein Test für einen Fehler
- Try
- Dim x As Integer = 1
- Dim y As Integer = 0
- Dim result As Integer
- result = CInt(x / y)
- Debug.WriteLine($"Ergebnis: {result}")
- Catch ex As Exception
- ' Logge die Exception mit verschiedenen Detailoptionen
- Logger.LogException(ex, ExceptionDetail.Message)
- 'Logger.LogException(ex, ExceptionDetail.StackTrace)
- 'Logger.LogException(ex, ExceptionDetail.Source)
- 'Logger.LogException(ex, ExceptionDetail.TargetSite)
- 'Logger.LogException(ex, ExceptionDetail.InnerException)
- 'Logger.LogException(ex, ExceptionDetail.Data)
- End Try
- End Sub
- Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
- Logger.OpenLogFile()
- End Sub
- End Class
Die Logger-Class:
VB.NET-Quellcode
-
- ' Definiert die verschiedenen Log-Level
- Public Enum LogLevel
- Debug
- Info
- Warning
- Failure ' "Failure" als Ersatz für "Error"
- Critical
- End Enum
- ' Definiert die verschiedenen Detailoptionen für eine Exception
- Public Enum ExceptionDetail
- Message ' Die Fehlermeldung der Exception
- StackTrace ' Der Aufrufstapel (Stack Trace) zum Zeitpunkt des Fehlers
- Source ' Die Quelle der Exception
- TargetSite ' Die Methode, die die Exception ausgelöst hat
- InnerException ' Eine möglicherweise vorhandene innere Exception
- Data ' Benutzerdefinierte Informationen zur Exception
- 'CustomEx ' Benutzerdefinierte Zusatzinformationen
- End Enum
- ''' <summary>
- ''' Klasse zur Protokollierung von Ereignissen und Ausnahmen in einer Log-Datei.
- ''' Bietet Funktionen zum Hinzufügen von Logeinträgen verschiedener Ebenen, zum Protokollieren von Ausnahmen
- ''' mit verschiedenen Detailoptionen und zum Öffnen der Log-Datei in einer Anwendung.
- ''' </summary>
- Public Class EventReportLogger
- ' Das Event, das bei Hinzufügen eines Logeintrags abonniert werden kann
- Public Event LogAdded(ByVal logEntry As String, ByVal category As String)
- ' Pfad und Level-Einstellungen für das Loggen
- Private ReadOnly executablePath As String = Application.ExecutablePath
- Private ReadOnly logFile As String = String.Format("EventReport{0:MM.yyyy}.txt", DateTime.Now)
- Private ReadOnly logFilePath As String
- Private _minLogLevel As LogLevel = LogLevel.Debug
- ' Eigenschaft, um das minimale Log-Level zu setzen oder abzurufen
- Public Property MinLogLevel As LogLevel
- Get
- Return _minLogLevel
- End Get
- Set(value As LogLevel)
- _minLogLevel = value
- End Set
- End Property
- ' Konstruktor, der den Pfad für das Log-Datei basierend auf dem aktuellen Datum setzt
- Public Sub New()
- logFilePath = Path.Combine(Path.GetDirectoryName(executablePath), logFile)
- End Sub
- ' Methode zum Hinzufügen eines Logeintrags mit dem angegebenen Level und der Nachricht
- Public Sub AddLogEntry(ByVal level As LogLevel, ByVal message As String)
- If level >= MinLogLevel Then
- Dim category As String = level.ToString()
- Dim logEntry As String = String.Format("[{0}] {1:dd.MM.yyyy HH:mm:ss}{2}{3}{2}", category, DateTime.Now, Environment.NewLine, message)
- SaveLogToFile(logEntry)
- RaiseEvent LogAdded(logEntry, category)
- End If
- End Sub
- ' Methode zum Speichern des Logeintrags in die Log-Datei
- Private Sub SaveLogToFile(ByVal logEntry As String)
- Try
- Using writer As New StreamWriter(logFilePath, True)
- writer.WriteLine(logEntry)
- End Using
- Catch ex As Exception
- ' Zeigt eine Fehlermeldung an, wenn das Speichern fehlschlägt
- MessageBox.Show("Fehler beim Speichern von: " & logFilePath & Environment.NewLine & ex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
- End Try
- End Sub
- ' Methode zum Protokollieren von Exceptions basierend auf verschiedenen Detailoptionen
- Public Sub LogException(ByVal ex As Exception, ByVal detail As ExceptionDetail)
- Select Case detail
- Case ExceptionDetail.Message
- AddLogEntry(LogLevel.Failure, ex.Message)
- Case ExceptionDetail.StackTrace
- AddLogEntry(LogLevel.Failure, ex.StackTrace)
- Case ExceptionDetail.Source
- AddLogEntry(LogLevel.Failure, ex.Source.ToString())
- Case ExceptionDetail.TargetSite
- If ex.TargetSite IsNot Nothing Then
- AddLogEntry(LogLevel.Failure, ex.TargetSite.ToString())
- End If
- Case ExceptionDetail.InnerException
- If ex.InnerException IsNot Nothing Then
- AddLogEntry(LogLevel.Failure, ex.InnerException.StackTrace)
- End If
- Case ExceptionDetail.Data
- For Each key As Object In ex.Data.Keys
- ' Loggt benutzerdefinierte Informationen zur Exception
- AddLogEntry(LogLevel.Failure, String.Format("{0}: {1}", key, ex.Data(key)))
- Next
- End Select
- End Sub
- ' Methode zum Öffnen des Logfiles in einer Anwendung
- Public Sub OpenLogFile()
- Try
- If File.Exists(logFilePath) Then
- Process.Start(logFilePath)
- Else
- MessageBox.Show("Log-Datei existiert nicht.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
- End If
- Catch ex As Exception
- MessageBox.Show("Fehler beim Öffnen der Log-Datei: " & ex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
- End Try
- End Sub
- End Class
Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen.