Seite 1 von 1
Log-klasse
#1
geschrieben 14. Juli 2006 - 14:02
Hallo
ich bin momentan an einer Klasse mit der man einfach log-dateien anfertigen kann.
Diese Datei soll eine Textdatei sein, in mehr mehrere Informationen Pro Zeile (1 Zeile = 1 Eintrag) stehen.
Diese sind durch ; getrennt und jeweils noch von "" umgeben.
Also s.B.: "Info";"10:30:23";"Verbindung aufgebaut"
Diese Datei wird jedoch von 2-3 Programmen gleichzeitig verwendet. Bisher habe ich da einen Timer, der sobald sich die Datei geändert hat, alle Einträge neu einliest. Allerdings dauetrt das mit ansteigender größe der Log-Datei immer länger.
Hat jemand eine idee wie ich oben beschriebene Prinzip beibehalten kann und dennoch höhere geschwindigkeiten beim einlesen erziele? Bisher habe ich ein ReadLine (bis eof) und darin die Aufteilung in Columns und einfügen in eine ListView.
Allerdings kommt eine Format wie XML wegen der unübersichtlichkeit leider nicht in Frage....
MFG
Don
ich bin momentan an einer Klasse mit der man einfach log-dateien anfertigen kann.
Diese Datei soll eine Textdatei sein, in mehr mehrere Informationen Pro Zeile (1 Zeile = 1 Eintrag) stehen.
Diese sind durch ; getrennt und jeweils noch von "" umgeben.
Also s.B.: "Info";"10:30:23";"Verbindung aufgebaut"
Diese Datei wird jedoch von 2-3 Programmen gleichzeitig verwendet. Bisher habe ich da einen Timer, der sobald sich die Datei geändert hat, alle Einträge neu einliest. Allerdings dauetrt das mit ansteigender größe der Log-Datei immer länger.
Hat jemand eine idee wie ich oben beschriebene Prinzip beibehalten kann und dennoch höhere geschwindigkeiten beim einlesen erziele? Bisher habe ich ein ReadLine (bis eof) und darin die Aufteilung in Columns und einfügen in eine ListView.
Allerdings kommt eine Format wie XML wegen der unübersichtlichkeit leider nicht in Frage....
MFG
Don
Anzeige
#2
geschrieben 15. Juli 2006 - 10:14
hoert sich nach nem idealen job fuer ne datenbank an ^^
I'm mó. mo's good twin.
#3
geschrieben 15. Juli 2006 - 11:01
Warum das Rat neu erfinden? Es gibt so viele schöne frei verfügbare Logger
ähm...und du weißt wirklich was XML ist?
XML wird doch wegen der einfach zu lesenden Baumstruktur sehr oft eingesetzt.
Zitat
XML wegen der unübersichtlichkeit
ähm...und du weißt wirklich was XML ist?
XML wird doch wegen der einfach zu lesenden Baumstruktur sehr oft eingesetzt.
#4
geschrieben 15. Juli 2006 - 11:22
Um zu wissen, ob sich was geändert hat, kannst du doch mit nem Hash des Inhalts arbeiten - oder nimmst du das Änderungsdatum der Datei?
Eine Datenbank ist auf jeden Fall schneller und du bekommst keine Probleme, mit zwei Programme gleichzeitig loggen wollen! Oft können fertige Lösungen diverse Sachen die man einfach nicht braucht, da ist sowas selbstgeschriebenes schon besser
Eine Datenbank ist auf jeden Fall schneller und du bekommst keine Probleme, mit zwei Programme gleichzeitig loggen wollen! Oft können fertige Lösungen diverse Sachen die man einfach nicht braucht, da ist sowas selbstgeschriebenes schon besser

#6
geschrieben 16. Juli 2006 - 19:07
Ich kann natürlich jetzt nicht genau sagen wie dein komplettes Szenario aussieht, aber um z.B. mehreren Programmen immer die Möglichkeit zu geben an die aktuellsten Daten ranzukommen würde ich shared memory nutzen.
Z.B. Programm 1 logged 10 Zeilen in nen shared memory bereich, und überschreibt die älteste mit nem neuen Eintrag, irgendwann kommen dann die anderen Programme hinzu und lesen laufend aus dem shm.
So damit kannst du dir z.B. immer die letzten 10 log Meldungen ansehen. Davor wenn du es benötigst, kannst du bei Programmstart erstmal die komplette Log Datei einlesen, danach laufend aus dem shared mem. Du benötigst auch keinen Timer, das ganze in nem thread wobei du den shared mem bereich mit nem Semaphore sperrst, somit bekommst du sofort mit wenn sich was ändert und hast keinen Zeit verlust wie mit nem Timer.
Z.B. Programm 1 logged 10 Zeilen in nen shared memory bereich, und überschreibt die älteste mit nem neuen Eintrag, irgendwann kommen dann die anderen Programme hinzu und lesen laufend aus dem shm.
So damit kannst du dir z.B. immer die letzten 10 log Meldungen ansehen. Davor wenn du es benötigst, kannst du bei Programmstart erstmal die komplette Log Datei einlesen, danach laufend aus dem shared mem. Du benötigst auch keinen Timer, das ganze in nem thread wobei du den shared mem bereich mit nem Semaphore sperrst, somit bekommst du sofort mit wenn sich was ändert und hast keinen Zeit verlust wie mit nem Timer.
#7
geschrieben 16. Juli 2006 - 19:35
lass doch jedes programm ne eigene log datei nutzen und mit deinem timre alle x-minuten die 3 logdateien in die haupt-logdatei hinzufügen und danach löschen
#9
geschrieben 17. Juli 2006 - 08:11
Mann das sind ja viele Antworten ;-)
Also an XML habe ich auch erst gedacht, aber GERADE die Baumstruktur ist etwas unübersichtlich.
Aber darauf werde ich wohl doch zurückgreifen ;-)
Eine Datenbank ist etwas überladen, denn diese kann man dann nur mit entsprechenden Tools öffnen.
Eine .txt Datei ist da wohl handlicher.
Ansonsten danke für eure Mühen. Ich werde dann wohl nach XML tendieren und wenn die Log-Datei exportiert werden soll, wird sie als .txt mit der oben beschriebenen Form gespeichert. MFG
Also an XML habe ich auch erst gedacht, aber GERADE die Baumstruktur ist etwas unübersichtlich.
Aber darauf werde ich wohl doch zurückgreifen ;-)
Eine Datenbank ist etwas überladen, denn diese kann man dann nur mit entsprechenden Tools öffnen.
Eine .txt Datei ist da wohl handlicher.
Ansonsten danke für eure Mühen. Ich werde dann wohl nach XML tendieren und wenn die Log-Datei exportiert werden soll, wird sie als .txt mit der oben beschriebenen Form gespeichert. MFG
#10
geschrieben 17. Juli 2006 - 12:53
Zitat
Ein sehr sehr einseitige Weltsicht.
Meine Empfehlung: log4j. Davon gibt's auch Derivate für .NET, C++, Python, Perl und Ruby. Und ist sehr ausgereift.
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.

Ja, mata ne!
(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)

Ja, mata ne!
(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
Thema verteilen:
Seite 1 von 1