SYSLOG(3)

NOMBRE
closelog, openlog, syslog - envían mensajes al registrador del sistema

SINOPSIS
#include <syslog.h>

void openlog(const char *ident, int option, int facility);
void syslog(int priority, const char *format, ...);
void closelog(void);

#include <stdarg.h>

void vsyslog(int priority, const char *format, va_list ap);

DESCRIPCIÓN
closelog() cierra el descriptor que se esté usando para escribir en el registrador del sistema. El empleo de closelog() es opcional.

openlog() abre, para un programa, una conexión con el registrador del sistema. La cadena de caracteres a la que apunte ident se adjunta con cada mensaje, y su valor es normalmente el nombre del programa. El argumento option especifica banderas que controlan la operación de openlog() y las llamadas posteriores a syslog(). El argumento facility establece un valor por defecto que se utiliza si no se especifica ninguno en llamadas posteriores a syslog(). Los valores de option y facility se dan abajo. El uso de openlog() es opcional; syslog() la llamaría automáticamente si fuera necesario, en cuyo caso ident tomaría el valor NULL.

syslog() genera un mensaje en el registro, que será distribuido por syslogd(8). El argumento priority se construye con la operación lógica OR de facility y de level , (explicados abajo). Los restantes argumentos son un formato, format, como en printf(3), y cualesquiera argumentos requeridos por format, salvo que la secuencia de dos caracteres %m será reemplazada por la cadena con el mensaje de error strerror(errno). Un carácter final de nueva línea será añadido cuando sea necesario.

La función vsyslog() hace la misma tarea que syslog() con la diferencia de que acepta un conjunto de argumentos que han sido obtenidos usando las macros de stdarg(3) para listas de argumentos variables.

PARÁMETROS
Esta sección enumera los parámetros empleados para poner los valores de option, facility, y priority.

  option
El argumento option de openlog() es el resultado de la combinación con el operador de bits O inclusivo de cualquiera de estos valoes:

LOG_CONS
    Escribe directamente en la consola del sistema si hay un error mientras se está enviando algo al registrador del sistema.

LOG_NDELAY
    Abre la conexión inmediatamente (normalmente, la conexión se abre cuando se registra el primer mensaje).

LOG_NOWAIT
    No espera a los procesos hijo que pueden haber sido creados mientras se registraba el mensaje. (La biblioteca C de GNU no crea un proceso hijo, así que esta opción no tiene efecto en Linux.)

LOG_ODELAY
    La opuesta de LOG_NDELAY; la apertura de la conexión se retrasa hasta que se invoca a syslog(). (Esta es la opción por defecto, y no necesita ser especificada.)

LOG_PERROR
    (No presente en SUSv3.) Imprime también en stderr.

LOG_PID
    Incluye el PID con cada mensaje.

  facility
El argumento facility se emplea para especificar qué tipo de programa está registrando el mensaje. Esto permite que en el fichero de configuración se especifique que mensajes de diferentes programas se manejen de forma distinta.

LOG_AUTH
    mensajes de seguridad o autorización (DESAPROBADO; emplee en su lugar LOG_AUTHPRIV)

LOG_AUTHPRIV
    mensajes de seguridad o autorización (privado)

LOG_CRON
    el demonio del reloj (cron y at)

LOG_DAEMON
    demonios del sistema con valor de `facility' separado

LOG_FTP
    demonio de ftp

LOG_KERN
    mensajes del núcleo

LOG_LOCAL0 a LOG_LOCAL7
    reservados para uso local

LOG_LPR
    subsistema de impresora de línea (de impresión)

LOG_MAIL
    subsistema de correo

LOG_NEWS
    subsistema de tablón de anuncios USENET News

LOG_SYSLOG
    mensajes generados internamente por syslogd

LOG_USER  (predeterminado)
    mensajes genéricos del nivel de usuario

LOG_UUCP
    subsistema de UUCP

  level

Esto determina la importancia del mensaje. Los niveles son, en orden de importancia decreciente:

LOG_EMERG
    el sistema está inutilizable

LOG_ALERT
    debe tomarse una acción correctora inmediatamente

LOG_CRIT
    condiciones críticas

LOG_ERR
    condiciones de error

LOG_WARNING
    condiciones de advertencia

LOG_NOTICE
    condición normal, pero significativa

LOG_INFO
    mensaje informativo

LOG_DEBUG
    mensaje del nivel de depuración

La función setlogmask(3) puede ser empleada para restringir el registro solamente en niveles determinados.

CONFORME A
Las funciones openlog(), closelog(), y syslog() (pero no vsyslog()) están especificadas en SUSv2 y POSIX 1003.1-2001. POSIX 1003.1-2001 especifica solamente los valores LOG_USER y LOG_LOCAL* para facility. Sin embargo, salvo la excepción de LOG_AUTHPRIV y LOG_FTP, los otros valores de facility aparecen en la mayoría de sistemas Unix. El valor LOG_PERROR para option no está especificado por POSIX 1003.1-2001, pero está disponible en la mayoría de versiones de Unix.

HISTORIA
La función syslog apareció en BSD 4.2. BSD 4.3 documenta openlog(), syslog(), closelog(), y setlogmask(). 4.3BSD-Reno documenta también vsyslog(). Por supuesto, funciones v* anteriores usaban el mecanismo <varargs.h> , que no es compatible con <stdarg.h>.

OBSERVACIONES
El parámetro ident en la llamada a openlog() es probablemente almacenado tal cual. De esta manera, si la cadena a la que apunta es modificada, syslog() puede comenzar añadiendo la cadena modificada, y si la cadena a la que apunta deja de existir, los resultados son indefinidos. La mayor portabilidad se consigue usando una cadena constante.

Nunca pase una cadena con datos de usuario como formato, use
    syslog("%s", string);
en su lugar.

VÉASE TAMBIÉN
logger(1), setlogmask(3), syslog.conf(5), syslogd(8)