Log dans le sens décroissant

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Log dans le sens décroissant

Re: Log dans le sens décroissant

par moogli » 05 sept. 2016, 13:31

fseek($fp,0); ?

l'affichage et le stockage c'est pas la même chose ;)
si ton fichier fait plusieurs milliers de ligne cela peux être gourmand.

tu peux simplifier ton code en file_put_content('lefichier','les données',FILE_APPEND) voir avec flag LOCK_EX

sinon tu peux te baser sur des solutions de log existantes (voir éprouvée) comme log4php[/php] qui va te permettre.

un article sur le sujet qui parle justement de laravel : [url]https://www.sitepoint.com/effective-php-logging-loggly/
(qui parle en plus de truc compatible psr3 ;) )

@+

Re: Log dans le sens décroissant

par stephweb » 05 sept. 2016, 09:57

Ok, merci à tous.

j'ai déjà lu la doc de fseek hier, et je n'et pas trouvé la solution. si tu peut m'aider, ça serai super.

Perso, je préfère du plus récent au plus ancien, (si le fichier fait plusieurs millier lignes, c'est plus simple), et Laravel utilise ce sens d'affichage.

Merci.

Re: Log dans le sens décroissant

par moogli » 05 sept. 2016, 09:31

salut,

tu peux simplement utiliser fseek pour mettre le curseur en début de fichier.
Par contre si le problème c'est la l'affichage tu peux très bien lire le fichier a l'envers, par exemple avec la fonction file et par courir le tableau du plus grand index au plus petit ou simplement utiliser la fonction array_reverse et un foreach ;)

un fichier de log est toujours du plus ancien au plus récent autant faire "comme tout le monde" histoire de simplifier la vie des gens qui pourront utiliser ton appli ;)


@+

Re: Log dans le sens décroissant

par or 1 » 04 sept. 2016, 21:00

ouvrir un nouveau fichier, y écrire la nouvelle ligne, récupérer le contenu du log et l'écrire dans le nouveau fichier, fermer les fichiers, supprimer le log, renommer le nouveau fichier.

mais si l'écriture doit être rapide car appelée fréquemment, il vaux mieux laisser l'ordre actuel, et inverser à la lecture du log plutôt qu'à l'écriture.

Log dans le sens décroissant

par stephweb » 04 sept. 2016, 18:27

Bonjour, j'ai besoin d'au petit coup de main svp.

Je me suis codé un petit script pour envoyer des logs d'information.
Dans l'état actuelle, les logs sont dans le sens : des plus ancien en haut, et les plus récent en bas.
Je souhaiterai inverser ce sens (que les logs les plus récents soient en haut).

Voici mon code actuelle :

Code : Tout sélectionner

<?php /** * Envoyer un log d'information de l'app (pour les fichiers qui sont dans le dossier "app") * * @param string $message * @param string $file - Pour éventuellement y logger dans un fichier spécifique */ public function infoApp($message, $file='infos-app') { $pathFileLog = ($file !== null) ? ROOT.'/logs/'.$file.'.log' : ROOT.'/logs/infos-app.log'; if (file_exists($pathFileLog)) { $fp = fopen($pathFileLog, 'a+'); fseek($fp, SEEK_END); $messageFinal = '# '.$this->dateTime->format('d/m/Y H:i:s').' - URL : '.getActiveUrl().' - IP : '.Request::getIp().' - Message :'."\r\n".$message."\r\n"."\r\n"; fwrite($fp, $messageFinal); fclose($fp); } else { $this->renderException('File "'.$pathFileLog.'" not found'); } }
Ensuite, dans mes Controllers, pour envoyer un log j'ai juste à faire ceci (je fait un appel static car j’utilise une Façade) :

Code : Tout sélectionner

<?php Log::infoApp('Message : Info...');
Comme faire ceci Svp ?

Merci beaucoup.