ToolCollection/ToolCollection/ClassLoggerDI.vb
Digital Data - Marlon Schreiber 3a25947af0 MS
2019-02-05 18:49:13 +01:00

284 lines
11 KiB
VB.net

Imports System.IO
Public Class ClassLoggerDI
Private Shared DateiSpeicherort As String = Nothing
Private Shared DateiPrefix As String = ""
Private Shared Datei As IO.File = Nothing
Private Shared Dateiname As String = ""
Private Shared StreamWriter As IO.StreamWriter = Nothing
Private Shared HasInformedAboutError As Boolean = False
' eine Art Konstruktor
Public Shared Sub Init(ByVal speicherort As String, Optional ByVal prefix As String = "", Optional ByVal appendFile As Boolean = True)
' initialisiert den Speicherort
ClassLoggerDI.SetSpeicherort(speicherort)
' wenn ein Präfix gesetzt wurde
If Not prefix = "" Then
' initialisiert das Prefix
ClassLoggerDI.SetPrefix(prefix)
End If
Dim str As String = ClassLoggerDI.DateiSpeicherort & "\" & ClassLoggerDI.DateiPrefix & System.DateTime.Now.ToString("yyyy_MM_dd") & ".txt"
str = str.Replace("W:", "\\windream\objects")
Dim anz As Integer = 1
Do While File.Exists(str)
Dim info As New FileInfo(str)
Dim length As Long = info.Length
If length > 5000000 Then
str = IO.Path.GetDirectoryName(str)
str = str & "\" & ClassLoggerDI.DateiPrefix & System.DateTime.Now.ToString("yyyy_MM_dd") & "(" & anz.ToString & ").txt"
anz = anz + 1
Else
Exit Do
End If
Loop
ClassLoggerDI.Dateiname = str
If Not appendFile Then
' der Versuch die Datei zu löschen
'Try
' My.Computer.FileSystem.DeleteFile(ClassNILogger.Dateiname, FileIO.UIOption.OnlyErrorDialogs, FileIO.RecycleOption.DeletePermanently)
'Catch ex As Exception
' ' bei Fehler besteht kein Schreibrecht auf die Datei oder Datei existiert nicht
' ' ALSO: alles Okay soweit
'End Try
My.Computer.FileSystem.WriteAllText(ClassLoggerDI.Dateiname, String.Empty, False)
End If
' testen ob sich die Datei öffnen und beschreiben lässt
'ClassNILogger.CheckIsLogWritable()
End Sub
' legt den Speicherort fest
Public Shared Sub SetSpeicherort(ByVal speicherort As String)
Dim f As New IO.DirectoryInfo(My.Application.Info.DirectoryPath & "\Log")
If speicherort = "" Then
If f.Exists = False Then
IO.Directory.CreateDirectory(My.Application.Info.DirectoryPath & "\Log")
End If
ClassLoggerDI.DateiSpeicherort = My.Application.Info.DirectoryPath & "\Log\"
Else
ClassLoggerDI.DateiSpeicherort = speicherort
End If
End Sub
' legt das Prefix für den Dateinamen fest
Public Shared Sub SetPrefix(ByVal prefix As String)
ClassLoggerDI.DateiPrefix = prefix
End Sub
Public Shared Sub Add(ByVal information As String, Optional ByVal mit_prefix As Boolean = True)
If ClassLoggerDI.OpenFile Then
Try
If mit_prefix Then
ClassLoggerDI.StreamWriter.WriteLine(System.DateTime.Now & " >> " & information)
Else
ClassLoggerDI.StreamWriter.WriteLine(information)
End If
ClassLoggerDI.CloseFile()
Catch e As Exception
ClassLoggerDI.ShowErrorMessage()
End Try
Else
ClassLoggerDI.ShowErrorMessage()
End If
End Sub
Public Shared Sub Add(ByVal ClassFunction As String, ByVal information As String)
If ClassLoggerDI.OpenFile Then
Try
ClassLoggerDI.StreamWriter.WriteLine("Exception (" & System.DateTime.Now & "): " & ClassFunction & " => " & information)
ClassLoggerDI.CloseFile()
Catch e As Exception
ClassLoggerDI.ShowErrorMessage()
End Try
Else
ClassLoggerDI.ShowErrorMessage()
End If
End Sub
Public Shared Sub Add(ByVal ex As Exception)
If ClassLoggerDI.OpenFile Then
Try
ClassLoggerDI.StreamWriter.WriteLine("Exception (" & System.DateTime.Now & "): " & ex.Message & " [" & ex.Source & "]")
ClassLoggerDI.CloseFile()
Catch e As Exception
ClassLoggerDI.ShowErrorMessage()
End Try
Else
ClassLoggerDI.ShowErrorMessage()
End If
End Sub
Public Shared Sub Add(ByVal ex As System.Data.OleDb.OleDbException) 'Oracle.DataAccess.Client.OracleException)
If ClassLoggerDI.OpenFile Then
Try
ClassLoggerDI.StreamWriter.WriteLine("OracleException (" & System.DateTime.Now & "): " & ex.Message & " [" & ex.Source & "][" & ex.ErrorCode & "]")
ClassLoggerDI.CloseFile()
Catch e As Exception
ClassLoggerDI.ShowErrorMessage()
End Try
Else
ClassLoggerDI.ShowErrorMessage()
End If
End Sub
Public Shared Sub Add(ByVal ClassFunction As String, ByVal ex As Exception)
If ClassLoggerDI.OpenFile Then
Try
ClassLoggerDI.StreamWriter.WriteLine("Exception (" & System.DateTime.Now & "): " & ex.Message & " [" & ex.Source & "] => " & ClassFunction)
ClassLoggerDI.CloseFile()
Catch e As Exception
ClassLoggerDI.ShowErrorMessage()
End Try
Else
ClassLoggerDI.ShowErrorMessage()
End If
End Sub
Public Shared Sub Add(ByVal ClassFunction As String, ByVal ex As System.Data.OleDb.OleDbException) 'Oracle.DataAccess.Client.OracleException)
If ClassLoggerDI.OpenFile Then
Try
ClassLoggerDI.StreamWriter.WriteLine("OracleException (" & System.DateTime.Now & "): " & ex.Message & " [" & ex.Source & "][" & ex.ErrorCode & "] => " & ClassFunction)
ClassLoggerDI.CloseFile()
Catch e As Exception
ClassLoggerDI.ShowErrorMessage()
End Try
Else
ClassLoggerDI.ShowErrorMessage()
End If
End Sub
Public Shared Sub Add(ByVal ClassFunction As String, ByVal information As String, ByVal ex As Exception)
If ClassLoggerDI.OpenFile Then
Try
ClassLoggerDI.StreamWriter.WriteLine("Exception (" & System.DateTime.Now & "): " & ex.Message & " [" & ex.Source & "] => " & ClassFunction & " => " & information)
ClassLoggerDI.CloseFile()
Catch e As Exception
ClassLoggerDI.ShowErrorMessage()
ClassLoggerDI.ShowErrorMessage()
End Try
Else
ClassLoggerDI.ShowErrorMessage()
End If
End Sub
' öffnet eine Datei zum Schreiben
Private Shared Function OpenFile()
Try
' wenn ein Speicherort festgelegt wurde
If Not ClassLoggerDI.DateiSpeicherort = Nothing Then
' den Dateienamen definieren
Dim dateiname As String = ClassLoggerDI.Dateiname
' Datei anlegen wenn noch nicht vorhanden
My.Computer.FileSystem.WriteAllText(dateiname, String.Empty, True)
' die Datei zum Schreiben öffnen
ClassLoggerDI.StreamWriter = New IO.StreamWriter(dateiname, True, System.Text.Encoding.UTF8)
End If
' wenn die Datei erfolgreich geöffnet wurde
If ClassLoggerDI.StreamWriter IsNot Nothing Then
Return True
Else
Return False
End If
Catch ex As Exception
Return False
End Try
End Function
' öffnet eine Datei zum Schreiben
Private Shared Function OpenFile(ByVal DateiSpeicherort As String, ByVal DateiPrefix As String)
Try
' wenn ein Speicherort festgelegt wurde
If Not DateiSpeicherort = Nothing And ClassLoggerDI.CheckIsLogWritable() Then
' den Dateienamen definieren
Dim dateiname As String = ClassLoggerDI.Dateiname
' Datei anlegen wenn noch nicht vorhanden
My.Computer.FileSystem.WriteAllText(dateiname, String.Empty, True)
' die Datei zum Schreiben öffnen
ClassLoggerDI.StreamWriter = New IO.StreamWriter(dateiname, True, System.Text.Encoding.UTF8)
End If
' wenn die Datei erfolgreich geöffnet wurde
If ClassLoggerDI.StreamWriter IsNot Nothing Then
Return True
Else
Return False
End If
Catch ex As Exception
Return False
End Try
End Function
' schliesst die geöffnete Datei
Private Shared Sub CloseFile()
' wenn eine Datei geöffnet ist
If ClassLoggerDI.StreamWriter IsNot Nothing Then
' die Datei schliessen
ClassLoggerDI.StreamWriter.Close()
ClassLoggerDI.StreamWriter = Nothing
End If
End Sub
Public Shared Function CheckIsLogWritable()
If ClassLoggerDI.OpenFile Then
Try
ClassLoggerDI.CloseFile()
Catch e As Exception
ClassLoggerDI.ShowErrorMessage()
Return False
End Try
Else
ClassLoggerDI.ShowErrorMessage()
Return False
End If
Return True
End Function
Public Shared Function CheckIsLogWritable(ByVal vDateiSpeicherort As String, ByVal vDateiPrefix As String)
If ClassLoggerDI.OpenFile(vDateiSpeicherort, vDateiPrefix) Then
Try
ClassLoggerDI.CloseFile()
Catch e As Exception
ClassLoggerDI.ShowErrorMessage()
Return False
End Try
Else
ClassLoggerDI.ShowErrorMessage()
Return False
End If
Return True
End Function
Private Shared Sub ShowErrorMessage()
If Not ClassLoggerDI.HasInformedAboutError Then
My.Settings.errortext = "Beim Öffnen der Logdatei ist ein Fehler aufgetreten. Bitte stellen Sie sicher das Sie sowohl über entsprechende Schreibrechte im Verzeichnis, als auch über ausreichend Speicherplatz zum Speichern der Logdatei verfügen." & vbNewLine &
"Es wird keine Logdatei angelegt oder beschrieben." & vbNewLine & "Im Folgenden werden Sie über Fehler, den Log betreffend nicht weiter informiert, um den Ablauf der Nachindexierung nicht zu stören."
My.Settings.Save()
clsHelper.Add_Application_log(My.Settings.errortext)
'MsgBox("Beim Öffnen der Logdatei ist ein Fehler aufgetreten. Bitte stellen Sie sicher das Sie sowohl über entsprechende Schreibrechte im Verzeichnis, als auch über ausreichend Speicherplatz zum Speichern der Logdatei verfügen." & _
' vbNewLine & vbNewLine & "Es wird keine Logdatei angelegt oder beschrieben." & vbNewLine & vbNewLine & "Im folgenden werden Sie über Fehler, den Log betreffend nicht weiter informiert, um den Ablauf des Dateiimporters nicht zu stören.", _
' MsgBoxStyle.Information, "DI: Fehler beim Öffnen der Logdatei")
ClassLoggerDI.HasInformedAboutError = True
End If
End Sub
End Class