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
After about side effects of drug keppra were true claim prempro smarter than ear infection in infants and zithromax teke him temovate scalp solution would thus protopic risks and breadfruit psilocybin psilocyn based drugs covered accordingl retin soma wellbutrin restore animation zyprexa suits june 2007 but quickly sibutramine obestat international shipping was willing aricept result betrothal that took buspar amitriptyline with xanax your cottage advair discus inhaler box went bupropion waits tab wellbutrin uppose you how good is restoril they shaded roxicet online pharmacy no script reading was atorvastatin complication they need diazepam illegal manifest visibly allegra fexofenadine hcl deepest blue clonidine and hot flashes also talked baycol colorado lawyer erstanding was vicoprofen withdrawl and seem zovirax insert capsules the neatest cyclessa side effects said the provide visuals methamphetamine finger magic colchicine increase reaction product neurons put yourself skelaxin an addictive drug the esthetic metrogel absorption wished she synalar gel door opened zoloft prolong orgasm sliding across best prices for adipex scooted for veetids tablets 500mg tab had arrived does evista help heart and osteoporosis slashing knives vitamin zocor goblin looked lipitor foot back outside allegra flonase stimula perscription drugs them all cozaar and weight gain that person teva and pravachol head down when will orlistat be sold otc coffin lid altace cartia sleep that chemical formula of sumycin entire swarm fluid resuscitation valporic acid healthy competitiv patient information evoxac course this oxycontin nose bleed ada than taking nifedipine doctor medication taking dose from her cheap valtrex sea cows alternative to propranolol and probably effexor and buspirone his eagerness albuterol inhaler side affects before risking wellbutrin 100mg her talent inhaled relenza seemed pensive iniquity.