Hi,
ich bin gerade am überlegen, wie man sinnvoll ein LogFile für Multithreading implementieren könnte. Das grundsätzliche Problem dabei ist, dass die vielen Threads halt völlig ungeordnet ins LogFile schreiben, was es unterm Strich dann unbrauchbar macht. Was ich suche, ist eine konzeptionelle Idee, wie sowas am besten umgesetzt werden könnte. Meine Idee ist bisher folgende:
Ich habe eine LogFile Klasse, welche die Methode WriteEntry2 bereitstellt.
Mein Konzept sieht vor, dass das LogFile durch die Threads geöffnet und geschlossen wird, sodass die Threads nicht gleichzeitig ins File schreiben. Das LogFile soll am besten in Excel betrachtet werden. Durch das Semicolon erhält man eine Datenstruktur. Man kann somit nach der Thread ID filtern.
Meine Frage ist, ob das Konzept im Hinblick auf die Performance und die Übersicht in Ordnung ist. Gibt es für den Schreibvorgang eventuell eine bessere Lösung als den Filestream und Streamwriter permanent zu öffnen und zu schließen. Man soll ja auch die Möglichkeit haben, das LogFile betrachten zu können, während noch was passiert.
Danke für Eure Anmerkungen
Gruß Magic
ich bin gerade am überlegen, wie man sinnvoll ein LogFile für Multithreading implementieren könnte. Das grundsätzliche Problem dabei ist, dass die vielen Threads halt völlig ungeordnet ins LogFile schreiben, was es unterm Strich dann unbrauchbar macht. Was ich suche, ist eine konzeptionelle Idee, wie sowas am besten umgesetzt werden könnte. Meine Idee ist bisher folgende:
Ich habe eine LogFile Klasse, welche die Methode WriteEntry2 bereitstellt.
Code:
object _lock = new object();
private void WriteEntry2(string text,LogfileMessageType lmType)
{
lock (_lock)
{
using (FileStream fs = new FileStream(_logfile, FileMode.Append, FileAccess.Write, FileShare.ReadWrite))
{
using (StreamWriter sw = new StreamWriter(fs))
{
if (text.Length > 0)
sw.WriteLine(string.Format("{0};{1};{2};{3}", GetTimeStamp(), GetThreadID(), lmType, text));
else
sw.WriteLine(string.Empty);
}
}
}
}
Mein Konzept sieht vor, dass das LogFile durch die Threads geöffnet und geschlossen wird, sodass die Threads nicht gleichzeitig ins File schreiben. Das LogFile soll am besten in Excel betrachtet werden. Durch das Semicolon erhält man eine Datenstruktur. Man kann somit nach der Thread ID filtern.
Meine Frage ist, ob das Konzept im Hinblick auf die Performance und die Übersicht in Ordnung ist. Gibt es für den Schreibvorgang eventuell eine bessere Lösung als den Filestream und Streamwriter permanent zu öffnen und zu schließen. Man soll ja auch die Möglichkeit haben, das LogFile betrachten zu können, während noch was passiert.
Danke für Eure Anmerkungen
Gruß Magic