Je consacre un peu de temps a reprendre des scripts de monitoring en Perl, et je me pose une question concernant la meilleure façon de mettre a jour des fichiers de log.
Structure du fichier:
Des balises fixes en début et en fin de fichier (non négociables, ces logs sont feedés ensuite a une appli qui en a besoin pour fonctionner, ce qui est mon principal souci), genre <html> et </html>
En deuxième ligne, une ligne de taille fixe contenant la date et l'heure de dernière mise à jour du fichier
Puis, le contenu de mon fichier. En pratique ca donne :
<html>
LastUpdate : 2010:07:27:04:58:27:369760<br>
Lignes de log horodatées
</html>
Un fichier est généré par heure.
Ce log est construit par quelques scripts distincts lancés séquentiellement par un mini ordonnanceur, a intervalles réguliers.
J'effectue la mise à jour de la façon suivante :
- Ouverture du fichier en lecture et copie directe dans un tableau, puis fermeture
- Réouverture du fichier en écriture, réécriture des premières lignes a partir du tableau en mettant a jour l'heure, ajout des lignes générées par le script, remise en place de la balise de fin.
Ca fonctionne, mais sur le principe ca me parait lourd en I/O. Si je lance 20 fois mon script dans la minute, mon fichier sera intégralement lu et réécrit 20 fois ...
Y'aurait moyen d'optimiser ca ?