• Publicidad

Uso de Sys::Syslog

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Uso de Sys::Syslog

Notapor jreyesb » 2009-09-02 12:15 @552

Hola, buen día a todos.

Bueno, mi pregunta es la siguiente: me han encomendado la tarea de enviar ciertos mensajes hacia un Syslog en UNIX de tal forma que empecé desarrollando un socket cliente (también hice mi socket servidor para comprobar) y me ha funcionado muy bien. Este es mi código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use strict;
  2. use IO::Socket::INET;
  3.  
  4. print "\n>> Programa Cliente <<\n";
  5. my $MySocket = new IO::Socket::INET -> new(PeerPort => 1234, Proto => 'udp', PeerAddr => 'localhost');
  6. my $def_msg = "Escriba el mensaje para ser enviado: ";
  7. print "\n$def_msg";
  8. while(my $msg = <STDIN>) {
  9.         chomp $msg;
  10.         if($msg ne '') {
  11.                 print "\nEnviando... '$msg'";
  12.                 if($MySocket -> send($msg)) {
  13.                         print ".....<terminado>\n";
  14.                         print $def_msg;
  15.                 }
  16.         }
  17.         else {
  18.                 $MySocket->send('');
  19.                 exit 1;
  20.         }
  21. }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Ahora bien, cuando intenté enviar esto al equipo en donde radica el Syslog por el puerto 514, el Syslog no lo registró en el log que escribe. Sin embargo, con el programa snoop (que entiendo es como un sniffer) sí veo que mi mensaje llega, de tal forma que al investigar un poco más me di cuenta que existen dos módulos para comunicarse por medio de Perl con el Syslog; Sys::Syslog creo que es el que me sirve, sin embargo no logro entenderlo.

¿Alguien tiene un ejemplo? Solo necesito saber cómo enviar, por ejemplo, la cadena "hola mundo" (jeje).

Mil gracias.
Última edición por jreyesb el 2009-09-02 17:10 @757, editado 2 veces en total
Jorge Reyes
Soporte Aplicativo - Iusacell Mexico
jreyesb
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2009-07-08 20:36 @900

Publicidad

Re: Uso de Sys::Syslog

Notapor explorer » 2009-09-02 13:16 @594

Dos cosillas:

1.- No publiques tu correo electrónico en estos foros (ni en ningún otro) salvo que quieras recibir toneladas de correo basura. Te aconsejo que reedites tu mensaje y lo quites.

2.- Te aconsejo el uso del módulo Log::Syslog::Fast. Es más rápido y fácil de usar que el Sys:Syslog.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  use Log::Syslog::Fast ':all';
  my $logger = Log::Syslog::Fast->new(LOG_UDP, "127.0.0.1", 514, LOG_LOCAL0, LOG_INFO, "mymachine", "logger");
  $logger->send("log message", time);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Recuerda que el demonio syslogd debe estar arrancado con la opción -r para permitir la recepción de informes desde la red externa (consulta la página de manual).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Uso de Sys::Syslog

Notapor jreyesb » 2009-09-02 17:15 @760

¡¡Hola Administrador!!

Gracias por el tip de la firma, no sé en qué estaba pensando :lol:

Muchas gracias por el código. Les comento que he logrado utilizar el otro módulo y me ha ido bien; se los pongo para que entonces quede completa esta referencia a Syslog y tengamos 2 alternativas.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use strict;
  2. use Sys::Syslog qw(:DEFAULT setlogsock);
  3.  
  4. my $remotehost = $ARGV[0];
  5. my $ident = $ARGV[1];
  6. my $logopt = $ARGV[2];
  7. my $facility = $ARGV[3];
  8. my $level = $ARGV[4];
  9. my $message = $ARGV[5];
  10.  
  11. if($remotehost eq '' || $ident eq '' || $logopt eq '' || $facility eq '' || $level eq '' || $message eq '') {
  12.         print "\nNumero de parametros no valido\n
  13. perl sendto_syslog.pl <Host> <Identificador> <OpcionLOG> <Facilidad> <Nivel> <Mensaje>\n
  14. Ningun mensaje enviado\n";
  15.         exit 1;
  16. }
  17.  
  18. print "\nEnviando... $message";
  19.  
  20. setlogsock("udp", $remotehost);
  21.  
  22. #       openlog($ident, $logopt, $facility)
  23.  
  24. openlog($ident, $logopt, $facility);
  25.  
  26. #       syslog($priority, $format, @args)
  27.  
  28. syslog($level, $message);
  29. closelog();
  30. print "\n.....Terminado\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Yo lo ejecuto así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
perl sendto_syslog.pl X.X.X.X TEST ndelay user err "Hola Syslog"
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Saludos a todos,
PD. Excelente FORO, Felicidades, Admin.
Última edición por explorer el 2009-09-02 18:07 @796, editado 1 vez en total
Razón: Ortografía
Jorge Reyes
Soporte Aplicativo - Iusacell Mexico
jreyesb
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2009-07-08 20:36 @900


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados

cron