Page 1 sur 1

Log dans le sens décroissant

Posté : 04 sept. 2016, 18:27
par stephweb
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.

Re: Log dans le sens décroissant

Posté : 04 sept. 2016, 21:00
par or 1
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.

Re: Log dans le sens décroissant

Posté : 05 sept. 2016, 09:31
par moogli
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

Posté : 05 sept. 2016, 09:57
par stephweb
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

Posté : 05 sept. 2016, 13:31
par moogli
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 ;) )

@+