Frage

Ich habe eine Log-Datei implementiert, die die CPU und Speicherzustand eines Prozesses werden die Speicherung nach jedem minute.I der maximalen Größe der Datei zu 3 MB beschränkt hat (das ist genug für meine Zwecke).

Das Skript wird von einem Cron-Job nach jeder Minute aufgerufen werden und das Skript wird die Details für diese Minute anmelden und wird die Datei als „Log_.log“ umbenennen.

Wenn die Größe erreicht „3 MB - 100 Bytes“ Ich habe den Dateizeiger auf Punkt an den Anfang zurück und wird den ersten Eintrag in der Protokolldatei überschrieben und wird nun die Datei als umbenennen "log_ <0 + einige Offset > .log ".

Als ich die Datei nach jeder Minute am Umbenennen der Datei Zeigerposition zu aktualisieren, ist es eine gute / effiziente Art und Weise?

Ich will nicht mehr als eine Protokolldatei für diesen Zweck erhalten.

Eine weitere Option für mich ist die Datei Zeigerposition in einer Datei zu halten, aber .... eine andere Datei !! nicht interessiert man bei der Aufrechterhaltung, wenn diese Option ist gut:)

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Sind Sie ein Ingenieur? Dies ist ein schönes Beispiel für einige einfache Aufgabe gelöst durch eine perfekt funktioniert, aber zu komplex Lösung.

Es sei denn, die Inhalte, die Sie in setzen nimmt genau so viele Bytes wie die Inhalte, die Sie herausnehmen, das Schreiben „in“ einer Datei wird tatsächlich führen, dass die ganze folgende Teil nach dem Schreibposition auf der Festplatte neu geschrieben werden. Anfügen ist viel billiger .

Umbenennen der Datei, die die Zeiger Werke zu speichern - aber es ist nicht sehr elegant und macht stopfen komplexere (für ein, Ihre Prozessanforderungen Rechte auf das Verzeichnis schreiben, in dem sich die Datei befindet - sonst nur Schreibzugriff auf zwei Dateien ist ausreichend)

Es sei denn Speicherplatz ein Problem ist (und wirklich, es ist selten), ist Ihr Ansatz ist weniger effizient als sagen wir, append alles in eine Datei, und drehen Sie die Datei, wenn sie ihre maximale Größe erreicht . Auf diese Weise haben Sie immer die letzten 3 MB Logs und maximal 3 MB mehr in der aktuellen Datei. Es wird die Datei viel einfacher machen Parsen, anstatt das gesamte Zeigerposition, was neu berechnet wird.

Aktualisieren Sie Ihre Kommentare zu beantworten:

Umbenennen einer Datei jede Minute (oder sogar jede Sekunde) sollte Ihr System nicht verlangsamen deutlich, keine Sorge darüber.

Unsere Bedenken sind vor allem mit „warum Sie denken, müssen Sie die Datei umbenennen“. Es ist nicht besser technisch, ist es nicht besser aus logischer Sicht macht es eine Menge anderer (zukünftige) Aufgaben schwieriger. Sie könnten den Dateizeiger in einer separaten Datei gespeichert werden, oder am Ende der Datei, und es gibt bessere ^ H ^ H ^ H ^ H ^ H ^ H einfachere Lösungen, die überhaupt nicht den Dateizeiger erfordern.

Andere Tipps

Ich bin verwirrt, warum Sie Ihre Datei umbenennen würde. Was bedeutet dies zu erreichen?

Sind die Protokolleinträge eine feste Größe? Oder variabler Größe?

Wenn die Einträge Größe festgelegt sind, dann gibt es keine Probleme bei der neu zu schreiben, die vorhandenen Datei von Anfang an: Sie nicht immer unvollständige Einträge in der Datei haben, und wenn Sie einen Zähler oder Zeitstempel in die Datei zu schreiben sollte es klar sein, wo die ‚Cursor‘ befindet.

Wenn die Einträge variabler Größe sind, dann sollten Sie wahrscheinlich beginnen die Datei nicht von Anfang an-re zu schreiben, ohne irgendwie macht es klar, wo die ‚Cursor‘ in der Datei gespeichert sind, und schreibt Code, der zum Lesen abgeschnitten Protokoll elastisch ist Einträge.

Können Sie wiederverwenden bestehenden Tools wie RRDtool ?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top