Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2476 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  Ecriture dans un fichier de log

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Ecriture dans un fichier de log

n°2013917
ccp6128
Syntax error
Posté le 03-08-2010 à 12:30:15  profilanswer
 

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 ?

mood
Publicité
Posté le 03-08-2010 à 12:30:15  profilanswer
 

n°2013968
gilou
Modérateur
Modzilla
Posté le 03-08-2010 à 15:25:34  profilanswer
 

La je repeins la cuisine de ma mère, donc j'ai pas trop le temps de réfléchir à ça, mais jettes un œil à Log::Log4perl, le standard du log sous perl (et java)
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2014054
peck202
Posté le 03-08-2010 à 23:31:23  profilanswer
 

Tu commence mal car tes spécifications ne correspondent pas à un fichier de log. Un vrai fichier de log ne doit jamais être modifié, on ne peut que lui ajouter des données à la fin (chattr +a si besoin).
 
Sinon pour répondre à la question oui c'est légèrement lourd en io, mais ca dépend de la taille de ton fichier. La meilleure méthode pour ca c'est de stocker dans un autre fichier la position du dernier élément écrit. Ensuite pour écrire un nouvel élément tu fait un open, puis un seek vers cette position  et voila tu n'a plus qu'a ajouter ce qu'il manque au fichier.


---------------
Vous admin ? http://linux-attitude.fr
n°2014058
ccp6128
Syntax error
Posté le 04-08-2010 à 00:00:19  profilanswer
 

Merci a vous 2 je regarde ca demain.
 
Peck : t'as tout a fait raison, je me demande encore pourquoi l'appli derrière a besoin d'un truc aussi alambiqué :/
 
Je regarderai ca pour l'histoire du seek, a priori je pourrais me débrouiller vu que les déplacements sont fixes.

n°2014527
ccp6128
Syntax error
Posté le 05-08-2010 à 15:26:53  profilanswer
 

Je suis passé à Tie::File
 
Je vais voir si ca me permet de réduire les I/O.

n°2014591
peck202
Posté le 05-08-2010 à 17:18:59  profilanswer
 

Ca te simplifie le code, mais ce ne change rien aux io je pense.


---------------
Vous admin ? http://linux-attitude.fr
n°2014717
gilou
Modérateur
Modzilla
Posté le 06-08-2010 à 10:26:02  profilanswer
 

ccp6128 a écrit :

Je suis passé à Tie::File
 
Je vais voir si ca me permet de réduire les I/O.

Non, à chaque print, ça te sauve tout le fichier.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2014722
gilou
Modérateur
Modzilla
Posté le 06-08-2010 à 10:33:27  profilanswer
 

Citation :

Ce log est construit par quelques scripts distincts lancés séquentiellement par un mini ordonnanceur, a intervalles réguliers.

Quand je lis ça, je pense plutôt script de log unique tournant comme un service et appelé par les autres scripts.  
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2014795
ccp6128
Syntax error
Posté le 06-08-2010 à 11:59:23  profilanswer
 

Retour sur mon test, effectivement Tie::File m'a pas spécialement avancé (autant d'I/O et occupation CPU en hausse).
 
Je pense qu'il va falloir que je refactorise une grosse partie du code (actuellement les scripts génèrent les logs ligne par ligne, il faudrait que je bufferise l'ensemble des lignes avant d'écrire par blocs le fichier).
 
Je regarderai au passage comment implémenter ta solution Gilou.

n°2014904
gilou
Modérateur
Modzilla
Posté le 06-08-2010 à 16:08:11  profilanswer
 

C'est sous unix ou sous windows que ça doit tourner?
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
mood
Publicité
Posté le 06-08-2010 à 16:08:11  profilanswer
 

n°2014948
ccp6128
Syntax error
Posté le 06-08-2010 à 17:04:50  profilanswer
 

du Linux (RedHat 4 / Redhat 5 pour être précis).


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  Ecriture dans un fichier de log

 

Sujets relatifs
[shell] récupération infos dans .txt et écriture dans un autre fichier[C] Ecriture dans un fichier
Pattern Java | Probleme ecriture dans fichier texte.lecture/écriture fichier texte et conversion en données numériques
[C] Ecriture/lecture de float dans un fichierPb ecriture dans un fichier csv
écriture dans un fichier en J2me[Fortran 77] Pb ecriture fichier : pseudo-NaN...
Ecriture dans un fichierEcriture de log et accès simultané au fichier
Plus de sujets relatifs à : Ecriture dans un fichier de log


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR