Ich habe ein Programm in C++ geschrieben und frage mich, ob mir jemand mit der hier beschriebenen Situation helfen kann.
-
Angenommen, ich habe eine Protokolldatei mit einer Größe von etwa 30 MB. Ich habe die letzten 2 MB der Datei in einen Puffer innerhalb des Programms kopiert.
-
Ich lösche die Datei (oder lösche den Inhalt) und schreibe dann meine 2 MB zurück in die Datei.
Bis hierhin funktioniert alles einwandfrei. Aber das Problem ist, dass ich die Datei (die letzten 2MB) lese und die Datei (die 30MB Datei) lösche und dann die letzten 2MB zurückschreibe. Zu viel Zeit benötigt werden, wenn in einem Szenario, wo ich bin Kopieren letzten 300MB der Datei aus einer 1GB-Datei.
Hat jemand eine Idee, wie man diesen Prozess vereinfachen kann?
Bei einer großen Protokolldatei sollten und werden die folgenden Gründe berücksichtigt werden.
Speicherplatz: Protokolldateien sind unkomprimierter reiner Text und verbrauchen viel Speicherplatz. Eine typische Komprimierung reduziert die Dateigröße um 10:1. Eine Datei kann jedoch nicht komprimiert werden komprimiert werden, wenn sie in Gebrauch (gesperrt) ist. Daher muss eine Protokolldatei, die nicht mehr verwendet wird, rotiert werden.
System-Ressourcen: Das regelmäßige Öffnen und Schließen einer Datei verbraucht viel Systemzeit. Ressourcen und würde die Leistung des Servers beeinträchtigen.
Größe der Datei: Kleine Dateien sind leichter zu sichern und wiederherzustellen, falls ein Fehler auftritt.
Ich möchte nur nicht die letzten spezifischen Zeilen kopieren, löschen und erneut in eine Datei schreiben. Nur ein einfacheres Verfahren.... :-)
EDIT: Es wird kein interner Prozess zur Unterstützung der Protokollrotation durchgeführt. logrotate ist das Werkzeug.