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

  FORUM HardWare.fr
  Programmation
  PHP

  [Réglé] lire fichier log pendant qu'une application l'écrit

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Réglé] lire fichier log pendant qu'une application l'écrit

n°1760763
ouiouioui1​0
ChuckNorris sait diviser par 0
Posté le 17-07-2008 à 11:54:31  profilanswer
 

Bonjour, j'ai un programme qui écrit dans un fichier log chaque actions éxécuté de 1 à plus de 10 par secondes.
 
Je veux faire en php un programme qui lis au fur et à mesure les lignes et si il trouve ce que je cherche il executera une action en conséquence.
 
Je n'ai pas commencé j'ai besoin de votre avis pour la meilleur méthode et qui consommera le moins de ressource pour parser.
 
Mon idée une boucle infini:
ouverture log
je lis chaque ligne jusqu'à la fin et entreprend une action si je trouve ce que je cherche.
je note le nombre de ligne
je ferme le fichier
j'attends 1 seconde
 
est-ce que il y a mieux?  
J'ai besoin de fermer et réouvrir pour avoir les nouvelles lignes?
Peut-on limiter la puissance ex ne pas dépasser 10% de processeur?
 
Merci d'avance pour votre aide


Message édité par ouiouioui10 le 24-07-2008 à 12:48:53
mood
Publicité
Posté le 17-07-2008 à 11:54:31  profilanswer
 

n°1760766
flo850
moi je
Posté le 17-07-2008 à 11:57:19  profilanswer
 

vu ton besoin , est ce qu'il ne serai pas possible d'ecrire dans une base de données plutot ?  
 
ou alors regarde du cote de tail -f sous linux pour ne lire que la fin du fichier


---------------

n°1760774
ouiouioui1​0
ChuckNorris sait diviser par 0
Posté le 17-07-2008 à 12:08:59  profilanswer
 

non la base de données est à exclure le programme ne gère que la sortie dans un log
 
pour tail oui et non car le nombres de lignes écrit est variable et comment savoir le nombres de lignes à récuperer?

n°1761826
darksword
publicitaire
Posté le 18-07-2008 à 23:03:40  profilanswer
 

Ba ce que tu peux faire, c'est créer différents fichiers (puisque de toute façon à un moment donné, il te faudra gérer ce cas).
Toutes les minutes, tu log dans un fichier différent. Ton moniteur lui ne va regarder que les nouveaux fichiers (ceux qu'il n'a pas encore traité) puis ensuite concatène ou supprime les logs analysés.

n°1764187
ouiouioui1​0
ChuckNorris sait diviser par 0
Posté le 24-07-2008 à 12:48:16  profilanswer
 

j'ai fait comme j'ai dit en haut avec en plus je vais à la fin du log au lancement script sa évite de parser des actions déjà faite:

 
Code :
  1. if (!$log = @fopen($this->loggame, 'r')) {
  2.     $this->status($this->lang['erropen'] . ' "' . $this->loggame . '"');
  3.    } else {
  4.     if ($this->positionfile != 0) fseek($log, $this->positionfile);
  5.     else fseek($log, $this->positionfile, SEEK_END);
  6.     while (!feof($log)) {
  7.      $ligne = fgets($log, 4096);
  8.      if (strpos($this->tempwho, $player) == false) {
  9.       if (si ligne contient un interdit on punit) {
  10.        $this->punish(addslashes($player[1]), 'martyr');
  11.       }
  12.      }
  13.      usleep(15000); //0.015sec 75lignes/sec
  14.     }
  15.     $this->positionfile = ftell($log);
  16.     fclose($log);
  17. }
 

et sa fonctionne sans que sa fasse de pic serveur.
Si quelqu'un a une idée pour améliorer je suis preneur, je rajoute réglé quand même.


Message édité par ouiouioui10 le 24-07-2008 à 12:50:42
n°1764256
NewsletTux
<Insérez ici votre vie />
Posté le 24-07-2008 à 14:16:06  profilanswer
 

ya moyen d'interagir sur la sortie dans le log ? Genre rajouter un caractère spécial, qui te servirait de marqueur pour la dernière "session d'écriture" ?


Message édité par NewsletTux le 24-07-2008 à 14:16:23

---------------
NewsletTux - outil de mailing list en PHP MySQL
n°1764260
ouiouioui1​0
ChuckNorris sait diviser par 0
Posté le 24-07-2008 à 14:19:40  profilanswer
 

le but? Car la j'ai pas compris

n°1764264
NewsletTux
<Insérez ici votre vie />
Posté le 24-07-2008 à 14:23:49  profilanswer
 

localiser avec précision la dernière occurence de ce "marqueur" afin de ne pas avoir à se préoccuper du nombre de dernières lignes ajoutées ...


---------------
NewsletTux - outil de mailing list en PHP MySQL
n°1764292
ouiouioui1​0
ChuckNorris sait diviser par 0
Posté le 24-07-2008 à 14:52:37  profilanswer
 

et comment tu localise ce marqueur dans le fichier sans récupérer le contenu? :/

n°1764492
NewsletTux
<Insérez ici votre vie />
Posté le 24-07-2008 à 20:38:30  profilanswer
 

Effectivement tu en récupères forcément ...

 

Tiens, regarde dans la fonction fseek le 3eme commentaire en partant du haut :

Citation :

Here's a function I wrote to binary search for a line of text within a file, particularly useful when the file is too large to read into memory at once and you want a faster search than linear.

 

function binary_search_in_file($filename, $search)
[...]


je n'ai pas testé, mais ça a l'air intéressant comme principe. Il y a d'autres contributions qui peuvent donner des idées...


Message édité par NewsletTux le 24-07-2008 à 20:38:46

---------------
NewsletTux - outil de mailing list en PHP MySQL

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

  [Réglé] lire fichier log pendant qu'une application l'écrit

 

Sujets relatifs
[résolu] Lire un fichier de configurationimportation fichier > tableau dans python
[C] Manipulation de chaines dans un fichierIndicer les lignes d'un fichier texte avec C++
[URL REWRITING] Règle qui pose problèmeLecture fichier en binaire et valeur en hexa
modification fichier *.setExtraire lignes d'un fichier .csv avec Visual C++
export table SQL vers fichier 
Plus de sujets relatifs à : [Réglé] lire fichier log pendant qu'une application l'écrit


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