| 🇬🇧 English translation → |
|---|
![]() |
TSF-FileRotator Ein robuster, prozessunabhängiger Datei-Rotator für Pharo Smalltalk. Teil der TSF (Tiny Smalltalk Framework)-Suite |
TSF steht für Tiny Smalltalk Framework — eine Sammlung von minimalistischen Tools für robuste Anwendungen.
Der TSF-FileRotator ist ein Plugin für die TSF-Suite. Er überwacht Dateien (z.B. Logs), rotiert sie basierend auf konfigurierbaren Policies (Größe, Alter) und archiviert sie. Er wurde speziell für heterogene Umgebungen entwickelt (z.B. Go-Logger & Pharo-Rotator) und nutzt dateibasierte Locks, um Konflikte sicher zu vermeiden.
- Prozess-Agnostisch: Rotiert Dateien, die von anderen Prozessen (Go, Python, OS) geschrieben werden.
- Robustes Locking:
- Nutzt
.LOCKDateien zur Synchronisation. - Stale-Lock-Protection: Bereinigt verwaiste Locks nach Crashes automatisch.
- Retry-Logik: Wartet bei kurzen Schreibzugriffen (Spin-Lock mit Backoff).
- Nutzt
- Modulare Architektur:
- RotationPolicy: Wann wird rotiert? (z.B.
TsfFileSizeLimitPolicy). - ArchiveStrategy: Wie wird gespeichert? (z.B.
TsfZipArchiveStrategyoderTsfNoCompressionStrategy). - RetentionPolicy: Wie viele Backups werden behalten? (z.B.
TsfCountRetentionPolicy).
- RotationPolicy: Wann wird rotiert? (z.B.
- Design:
- Implementiert als POJO (Plain Object), das von
Objecterbt. - Keine direkte Abhängigkeit zum Scheduler in der Kernlogik.
- Implementiert als POJO (Plain Object), das von
- Dual Use: * Standalone: Manuelles Triggern via
TsfFileRotator >> execute.- Scheduled: Periodische Ausführung via TSF-Scheduler (Generic Task Adapter).
Metacello new
baseline: 'TsfFileRotator';
repository: 'github://georghagn/TSF-FileRotator:main';
load.Der Rotator ist ein eigenständiges Objekt, das über den generischen TsfTask im Scheduler registriert wird.
Beispiel: Log-Rotation mit Zip-Komprimierung und Aufräum-Logik (Retention).
| logFile rotator task |
"1. Die zu überwachende Datei"
logFile := FileSystem workingDirectory / 'server.log'.
"2. Den Rotator (Worker) konfigurieren"
rotator := TsfFileRotator new.
rotator configureWithFiles: { logFile }
rotationPolicy: (TsfFileSizeLimitPolicy new limit: 10 * 1024 * 1024) "10 MB"
archiveStrategy: (TsfZipArchiveStrategy new) "Als .zip speichern"
retentionPolicy: (TsfCountRetentionPolicy new maxCount: 5). "Max 5 Backups"
"3. Als Task verpacken und dem Scheduler übergeben"
task := TsfTask
named: 'ServerLogRotation'
receiver: rotator
selector: #execute
frequency: 5 minutes.
"4. Einplanen"
TsfCron current addPeriodicTask: task.- Check: Der Rotator prüft (via
execute), observer.logdas Limit (z.B. 10MB) überschreitet. - Lock: Er versucht,
server.log.LOCKzu erstellen. Falls vorhanden: Er wartet kurz (Retries). Wenn immer noch gelockt, bricht er für diesen Zyklus ab. Falls Lock "veraltet" (> 60s): Er löscht den Lock (Self-Healing). - Rotate:
server.logwird umbenannt zuserver.log.2023-11-24_10-00-00. Hinweis: Der externe Logger (Go/Pharo) muss so konfiguriert sein, dass er beim nächsten Schreibversuch automatisch eine neue Datei öffnet (Standardverhalten vieler Logger auf Linux/Mac). - Archive: Die umbenannte Datei wird zu
.zipkomprimiert und das Original gelöscht. - Retention: Alte Backups (älter als die letzten 5) werden gelöscht.
- Unlock: Die
.LOCKDatei wird entfernt.
(nicht in Pharo Standard Image/Library enthalten)
- TSF-Scheduler (für die periodische Ausführung)
Ein besonderer Dank gilt meinem KI-Sparringspartner für die intensiven und wertvollen Diskussionen während der Entwurfsphase. Die Fähigkeit der KI, verschiedene Architekturansätze (wie Composition over Inheritance und Mocking via Anonymous Subclasses) schnell zu skizzieren und Vor- und Nachteile abzuwägen, hat die Entwicklung von TSF-FileRotator erheblich beschleunigt und die Robustheit des Endergebnisses verbessert.
Dieses Projekt steht unter der Apache 2.0 Lizenz. Siehe LICENSE.
Bei Fragen oder Interesse an diesem Projekt erreichen Sie mich unter:
📧 georghagn [at] tiny-frameworks.io
(Bitte keine Anfragen an die privaten GitHub-Account-Adressen)
