Logdatei während der Laufzeit eines Programms erstellen
25. Februar 2008 von Sascha Zaubi
Um während der Laufzeit eines Programms eine Logdatei zu erzeugen, gibt es viele verschiedene Wege. Einer ist das Schreiben einer neuen Klasse, die Methoden zum Schreiben von Log-Einträgen bereitstellt. Eine solche Klasse habe ich in einem meiner jüngsten Projekte erstellt und erfolgreich verwandt. Als Hilfestellung für den einen oder andreen unter euch möchte ich euch den Quellcode hier erläutern.
Zunächst fügen wir unserem Projekt eine neue Klasse hinzu, indem wir im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt klicken und anschließend den Menüeintrag Hinzufügen > Klasse… anklicken. In meinem Projekt habe ich die Klasse “LogFile” genannt, so dass sie in der Datei “Logfile.vb” gespeichert wird.
Um uns ein wenig Tipparbeit zu ersparen, können wir die Namespaces System.IO und System.Console importieren. Fügt dazu den folgenden Quellcode zu Beginn eurer Klassendatei ein:
1 2 | Imports System.IO Imports System.Console |
Die Verwendung von Namespaces kann bei der späteren Verwendung unserer Klasse von Vorteil sein. Wir möchten unsere neue Klasse dem Namespace System.Logging zuordnen. Fügt dazu den folgenden Code in eure Klassendatei ein:
3 4 | Namespace System Namespace Logging |
Nun fängt der eigentliche Code an. Fügt die folgende Zeile in euren Quellcode ein, um die Klasse LogFile inkl. der Variable strFileName zu erzeugen:
10 11 | Public Class LogFile Private strFileName As String = "" |
Damit der Pfad zur Logdatei während der Laufzeit verwendet werden kann, soll unsere Klasse die ReadOnly-Eigenschaft FileName besitzen. Der folgende Code verwieht die Klasse mit der gewünschten Eigenschaft:
17 18 19 20 21 | Friend ReadOnly Property FileName() As String Get Return strFileName End Get End Property |
Ein während der Laufzeit des Programms erzeugtes Objekt unserer Klasse soll gleich mit einem Wert für die Eigenschaft FileName ausgestattet werden. Hierfür sorgt der Konstruktor:
30 31 32 | Friend Sub New(ByVal FileName As String) strFileName = FileName End Sub |
Mit den folgenden Code-Abschnitten wird die Klasse mit den nötigen Methoden für das Initialisieren und Schließen einer Logdatei und das Schreiben eines Log-Eintrags ausgestattet:
38 39 40 41 42 43 44 45 46 | Friend Sub StartLogging(ByVal LogFileHeader As String) WriteLine(LogFileHeader) WriteLine() Dim objLogFile As New StreamWriter(strFileName, False) objLogFile.WriteLine(LogFileHeader) objLogFile.WriteLine("Log-Datei von " & Format(Now, "dddd, dd. MMMM yyyy")) objLogFile.WriteLine() objLogFile.Close() End Sub |
53 54 55 56 57 58 59 | Friend Sub AddEntry(ByVal Message As String) WriteLine(Message) Dim objLogFile As New StreamWriter(strFileName, True) objLogFile.Write("[" & Format(Now, "dd.MM.yyyy - HH:mm:ss") & "] ") objLogFile.WriteLine(Message) objLogFile.Close() End Sub |
65 66 67 68 69 70 71 72 | Friend Sub FinishLogging(ByVal LogFileFooter As String) WriteLine() WriteLine(LogFileFooter) Dim objLogFile As New StreamWriter(strFileName, True) objLogFile.WriteLine() objLogFile.WriteLine(LogFileFooter) objLogFile.Close() End Sub |
Erklärung: Der Code erzeugt die Methoden StartLogging, AddEntry und FinishLogging. Die Methode StartLogging erstellt eine Logdatei und überschreibt dabei eine eventuell bereits vorhandene Logdatei. Anschließend wird der Kopf der Logdatei geschrieben. Hierbei wird ein String-Parameter als Überschrift verwendet. Die Methode AddEntry schreibt einen Log-Eintrag mit vorangestelltem Datum inkl. Uhrzeit in die Logdatei. Die Methode FinishLogging schreibt einen Fußtext (z. B. eine Zusammenfassung des Programmverlaufs) in die Logdatei und schließt diese anschließend.
Das war’s! Jetzt müsst ihr nur noch den Quellcode mit folgenden Codezeilen abschließen und unsere Klasse ist einsatzbereit.
74 | End Class |
76 77 | End Namespace End Namespace |
In eurem Programm könnt ihr nun ein Objekt der Klasse erzeugen und seine Methoden aufrufen. Der folgende Beispielcode zeigt euch wie’s geht:
1 2 3 4 | Dim objLogWriter As New System.Logging.LogFile(AppDomain.CurrentDomain.BaseDirectory & "MyLogFile.log") objLogWriter.StartLogging("MyLogHeader") objLogWriter.AddEntry("MyLogEntry") objLogWriter.FinishLogging("MyLogFooter") |
Ich hoffe, dass euch diese Codebeispiel ein wenig weiterhilft. Ihr könnt euch den kommentierten Quellcode auch direkt downloaden: Source Code (.vb)
Viel Spaß damit!
No related posts.
Ähnliche Artikel bereitgestellt von Yet Another Related Posts Plugin.
Hallo Zaubi,
danke für den Code hat mir sehr geholfen.
MfG
chk