Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Web » Ver logs en tiempo real Responder al tema
Nuevo tema


Página 1 de 1  [ 2 mensajes ] 
 
Nota Mié Jul 21, 2010 7:36 pm

Perlero Nuevo
Registrado: Mié Jul 21, 2010 7:22 pm
Mensajes: 1
Ver logs en tiempo real
Saludos, tengo el problema que quiero ver un archivo access.log en tiempo real y uso el siguiente código:

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. print "content-type: text/html \n\n";
  2.  
  3. print qq|
  4.  
  5. <html>
  6.  
  7.  <head>
  8.    <title>
  9.       Prueba de jQuery
  10.         </title>
  11.         <script src="jquery.js" type="text/javascript"></script>
  12.  
  13.  </head>
  14.  
  15.   <body>
  16. |;
  17.  
  18. print "Bienvenidos a mi script, si vemos este mensaje es porque funciona todo perfecto";
  19.  
  20. </script>';
  21. select(STDOUT);  $| = 1;        # Flush output after each print
  22.  
  23. print '<div id="resultadoConsulta"  style="width:600px; height:300px; overflow:auto;">';
  24.  
  25. open(LS,"/usr/bin/tail -f /var/log/access.log|");
  26. while ( $line = <LS>)
  27.    {
  28.         #print "$line<br>";
  29.         (@l) = split(/\s+/,$line);
  30.         chop($line);
  31.         $cad = $l[0]." ".$l[1]." ".$l[2]." ".$l[3]." ".$l[13];
  32.         $cad = $line;
  33.         print '<script language="JavaScript">$("#resultadoConsulta").prepend("'.$cad.'<br>")</script>';
  34.    }
  35. print "</div>";
  36. close(LS);
  37.  
  38. print qq|
  39. </body>
  40. </html>
  41. |;
  42.            
  43. exit(1);


Lo que hace este script es que ejecuta el comando tail y cuando tiene una nueva línea la agrega al principio de un div. El problema es que como nunca acaba el proceso del comando tail, al cerrar la página se queda ejecutando el proceso y se van acumulando. La pregunta es que si hay otra forma más eficiente de ver los logs en tiempo real. Gracias por su atención

Atentamente, Jonh


Nota Mié Jul 21, 2010 7:55 pm
Avatar de Usuario
Administrador
Registrado: Dom Jul 24, 2005 6:12 pm
Ubicación: Valladolid, España
Mensajes: 9492
Re: Ver logs en tiempo real
Bienvenido a los foros de Perl en Español, jonhperl.

Efectivamente, ese es el problema: que el programa tail nunca regresa.

Una forma sencilla de hacerlo sería, primero, haciendo un $|=1; al principio del CGI para evitar que haya cacheo de la salida. Luego, en lugar de usar el comando tail del sistema, podrías usar el módulo File::Tail, que realiza la misma operación, pero te permite ejecutar tu código línea a línea nueva de access.log, que enviarás a la salida estándar.

Así, el CGI nunca termina, y envía una línea del access.log (o más de una si las hubiere) a la página.

Lo malo es que no se trataría de una página HTML normal, ya que nunca se terminaría de forma automática, sino que pararía por orden del usuario o por un timeout del servidor. Y además, no es compatible con todos los navegadores, que a veces esperan a que la conexión termine para representar toda la página.

Otra forma de hacerlo: cuando el usuario desea ver el access.log, lo pasas a una página HTML que tiene puesta la opción de autorefrescarse cada X segundos. El refresco consiste en llamar a un CGI, que genera una página con las últimas N líneas de access.log (también con la ayuda de tail -N, por ejemplo). La ventaja es que con esta solución no hay programas funcionando y terminas la conexión HTTP enseguida. La desventaja es que si hay mucho movimiento en access.log, el usuario puede perder la vista de algunas líneas. Esto último se puede resolver usando cookies o una query con fecha, en la URL.

Esto mismo se puede realizar en forma de Ajax, pero la única diferencia es en la parte de presentación, no la de servidor. Con CGI::Ajax también lo puedes hacer.

_________________
JF^D Perl programming


Responder al tema  [ 2 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO