Salut,
j'utilise awstats, un magnifique outil d'analyse de logs tout écrit en perl et qui accepte des plugins.
Il existe un plugin (rawlog) qui permet d'afficher et de filtrer les logs, mais celui-ci ne fonctionne pas d'une façon très pratique je trouve, il permet de travailler sur les n premières lignes du fichier de log, et moi je travaille en général plutôt sur les n dernières lignes (ça me parait logique, m'enfin bref)
je cherche donc à le customiser légèrement pour qu'il ne renvoi pas les n premières lignes mais les n dernières.
voici le code original :
Code :
- # Precompiled regex Filter to speed up scan
- if ($Filter) { $Filter=qr/$Filter/i; }
- print "<hr />\n";
- # Show raws
- open(LOG,"$LogFile" ) || error("Couldn't open server log file \"$LogFile\" : $!" );
- binmode LOG; # Avoid premature EOF due to log files corrupted with \cZ or bin chars
- my $i=0;
- while (<LOG> ) {
- chomp $_; $_ =~ s/\r//;
- if ($Filter && $_ !~ /$Filter/o) { next; }
- print "$_<br />\n";
- if (++$i > $MAXLINE) { last; }
- }
- print "<br>\n<b>$i lines.</b><br />";
- return 1;
|
et voici mon code modifié :
Code :
- # Precompiled regex Filter to speed up scan
- if ($Filter) { $Filter=qr/$Filter/i; }
- print "<hr />\n";
- # Show raws
- open(LOG,"$LogFile" ) || error("Couldn't open server log file \"$LogFile\" : $!" );
- binmode LOG; # Avoid premature EOF due to log files corrupted with \cZ or bin chars
- my $i=0;
- seek(LOG,-$MAXLINE,2);
- while (<LOG> ) {
- chomp $_; $_ =~ s/\r//;
- if ($Filter && $_ !~ /$Filter/o) { next; }
- print "$_<br />\n";
- if (++$i > $MAXLINE) { last; }
- }
- print "<br>\n<b>$i lines.</b><br />";
- return 1;
|
dans les deux cas, $MAXLINE vaut 5000, mais avec ma modif (j'ai juste ajouté un seek), ça ne renvoi que 30 lignes
pourquoi?
Message édité par duch le 17-03-2004 à 10:48:03