C#: tail wie das Programm für die text-Datei
Habe ich eine log-Datei protokolliert permanent kurze Zeilen. Ich brauche, um einen Dienst zu entwickeln, der reagiert (oder Umfragen, oder hört), um neue Linien Hinzugefügt, um die Datei, eine Art von unix' tail-Programm, so dass mein service ist immer up to date reguarding die Datei.
Ich glaube nicht, dass die Eröffnung eines lese-stream und halten Sie es geöffnet, ist eine gute Idee. Vielleicht sollte ich nutzen der FileSystemWatcher-Klasse.
Lange Geschichte kurz, ich brauche, um zu analysieren, in Echtzeit jede neue Zeile zu dieser Datei Hinzugefügt.
Jede Idee, Hilfe oder Hinweis wirklich dankbar.
BEARBEITEN
Als ich schon nicht ganz klar. Ich brauche nicht jedes Programm, ich bin schreiben ein Programm. Zum Lesen (dann Verarbeitung) jede neue Zeile der Datei Hinzugefügt. Ich meine, dass das, was ich Suche, ist eine Methode (oder: wie implementieren Sie diese?) für kontinuierlich tailing eine Datei, die hält, die auf geschrieben worden.
Habe ich zu entwickeln, ein Windows-Dienst, der "hört" auf diese Datei und führt Operationen auf jede neue Zeile.
So, wenn man in einem bestimmten moment die Datei:
12.31.07 - jdoe [log on] 347
12.32.08 - ssmith [log on] 479
12.32.08 - mpeterson [log off] 532
12.32.09 - apacino [log on] 123
in dem moment, in dem die Linie
12.32.11 - pchorr [log on] 127
ist Hinzugefügt, um die log-Datei von der logging-Programm (ich habe keinen Zugang zu), muss ich meine Windows-Dienst, um "reagieren" zu der Zeile sucht, fangt die neue Zeile (12.32.11 - pchorr [log on] 127
) und verarbeiten es. Und so weiter.
Nun, ich weiß nicht, wie dies zu tun. Ich sollte eine Umfrage der Datei alle n-Sekunden, speichern Sie die zuletzt gelesene Zeile in den Speicher und verarbeitet nur die neu hinzugefügten Zeilen. Das problem mit diesem ist, dass sehr langsam ist, und ich würde das Lesen eine sehr große Datei jedes mal.
Oder vielleicht könnte ich FileSystemWatcher
, aber ich habe nicht gefunden eine Beispiel der Verwendung für ähnliche Zwecke.
So, was würden Sie vorschlagen, um die Arbeit zu erledigen? Danke.
- Warum können Sie nicht verwenden, Schwanz?
- Ich denke, er will eine Art der Verarbeitung auf die Zeilen, die Hinzugefügt, um die log-Datei nicht einfach anzeigen wie Schwanz hat und er würde gerne wissen, der beste Weg, um zu überwachen das Protokoll und Lesen in den Zeilen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde empfehlen, mit
FileSystemWatcher
über änderungen benachrichtigt werden, um die Datei oder Dateien, die Sie besorgt sind. Von dort aus würde ich die cache-Daten wie die Größe der Datei zwischen den Ereignissen und fügen Sie einige Logik nur beantworten, volle Linien, etc. Sie können dieSeek()
Methode derFileStream
Klasse springen zu einer bestimmten Stelle in der Datei zu Lesen und nur von dort. Diese Eigenschaften gegeben, es sollte nicht allzu schwer zu hand-roll diese Funktionalität, wenn das, was Sie brauchen.Einfache Lösung wäre die Verwendung , sample code provided in http://www.codeproject.com/Articles/7568/Tail-NET Artikel. Es ist nur eine Funktion kopieren/einfügen in Ihren code.
Es ist wichtig zu beachten, dass Microsoft seit vista/svr08) nicht mehr aktualisiert die Metadaten der Datei, wenn eine Datei aktualisiert wird (wie eine log-Datei aktualisiert, indem ein service).
Beispielsweise die Metadaten für eine Datei, wie Datum, nicht aktualisiert werden, bis die Datei geschlossen durch den Dienst/Programm, welches die Aktualisierung der log-Datei.
Daher FileSystemWatcher wird NICHT fangen log-file-updates als man erwarten könnte.
https://blogs.technet.microsoft.com/asiasupp/2010/12/14/file-date-modified-property-are-not-updating-while-modifying-a-file-without-closing-it/
Hast du nicht wirklich erklärt, ob Sie brauchen einen Schwanz-wie-Programm für Windows, d.h. http://www.baremetalsoft.com/baretail/ oder wenn Sie möchten, eine windows-version von tail (benutze cygwin) oder wenn Sie auf der Suche nach irgendeiner Art von log-monitoring-API....