Subsecciones

El Módulo Perl Sys::Syslog

El módulo Sys::Syslog facilita el envío de mensajes al daemon de syslog .

La Función openlog

Para iniciar Sys::Syslog llamamos a openlog:

openlog($identity, $options, $facility

Ejemplo de openlog

Por ejemplo:

casiano@beowulf:~$ cat syslog.pl
#!/usr/bin/perl -w
use strict;
use Sys::Syslog;

die "usage: $0 facility/priority message\n" unless @ARGV;

my ($facility, $priority) = split '/', shift;
my $message = join ' ', @ARGV;

openlog($0, "ndelay,pid", $facility) or die "fatal: can't open syslog: $!\n";
syslog($priority, "%s", $message);
closelog();
Al ejecutar este programa
casiano@beowulf:~$ perl syslog.pl LOCAL7/ERR 'ERRAR ES HUMANO'
produce en el fichero /var/log/syslog la siguiente entrada:

root@somemachine:/var/log# tail -1 syslog
May 13 14:22:12 somemachine syslog.pl[15254]: ERRAR ES HUMANO

Reglas de Configuración en syslog

El lugar en el que acabe el mensaje depende de las reglas establecidas en el fichero de configuración. Por ejemplo, la siguiente ejecución del programa:

casiano@beowulf:~/src/perl/syslog$ perl syslog.pl local3/debug 'Tachan! tachan! BOOOOOOOOOOOOOOMMMM!!!'
La advertencia queda en el fichero /var/log/debug.log:
root@beowulf:/var/log# tail -1 /var/log/debug
May 13 15:57:48 beowulf syslog.pl[17092]: Tachan! tachan! BOOOOOOOOOOOOOOMMMM!!!
Esto es asi por que en el fichero de configuración hay una línea de la forma:
root@beowulf:/var/log# sed -ne '41,43p' /etc/syslog.conf
*.=debug;\
        auth,authpriv.none;\
        news.none;mail.none     -/var/log/debug

La cual indica:

La Función syslog

Después de llamar a openlog llamaremos a syslog para enviar mensajes de log al daemon:

$bytes = syslog($priority, $format, @args)

El argumento $format funciona como en sprintf con la diferencia de que el formato %m se sustituye por el valor de $! y no requiere argumento.

Ejemplo de syslog con Formato

casiano@beowulf:~/src/perl/syslog$ cat -n formats.pl
 1  #!/usr/bin/perl -w
 2  use strict;
 3  use Sys::Syslog;
 4
 5  openlog($0, "ndelay,pid", 'LOCAL7') or die "fatal: can't open syslog: $!\n";
 6  open F, 'noexiste' or
 7    syslog('err', "Can't open file %s: %m", 'noexiste');
 8  close(F);
 9  closelog();
Dará lugar a una entrada como:
root@somemachine:/var/log# tail -1 syslog
May 13 14:49:29 somemachine formats.pl[15813]: Can't open file noexiste: \
                                    No existe el fichero o el directorio

Las Funciones closelog y setlogsock

La función closelog cierra la conexión y devuelve cierto si se hizo con éxito.

La función setlogsock controla si la conexión con el daemon de syslog se hará via internet o via un socket UNIX local:

setlogsock($socktype)

El argumento $socktype puede ser "inet" o "unix" (que es el valor por defecto). Esta función no es importada por defecto.

use Sys::Syslog qw{:DEAFULT setlogsock};

Casiano Rodríguez León
Licencia de Creative Commons
Programación Distribuida y Mejora del Rendimiento
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=44.
2012-06-19