Provocar y configurar los mensajes de registro.

linux-matrixMuchas aplicaciones han de registrar sus actividades. A menudo, los programas de sistema escriben mensajes a las consolas o a un archivo de registro. Dichos mensajes  pueden indicar errores, advertencias, o información más general sobre el estado del sistema. Por ejemplo, el programa su puede registrar el hecho de que un usuario haya intentado obtener privilegios de superusuario, fallando en el intento.

Con frecuencia, estos mensajes de registros se guardan en archivos de sistema en un directorio creado para tal finalidad. Puede ser /usr/adm o /var/log. En una instalación típica de Linux, el archivo /var/log/messages contiene todos los mensajes del sistema, /var/log/mail contiene otros mensajes de registros del sistema de correo electrónico, y /var/log/debug contiene mensajes de error. Puede comprobar la configuración de su sistema en los archivos /etc/syslog.conf o /etc/syslog-ng/syslog-ng.conf, dependiendo de su versión de Linux.

 Algunos sistemas UNIX no proporcionan esta clase de mensajes legibles, sino que proveen al administrador de herramientas para poder leer una base de datos que contiene eventos del sistema.

A pesar de que el formato y el almacenamiento de los mensajes del sistema pueden variar, el método para generar mensajes es estándar. La especificación UNIX proporciona una interfaz para que todos los programas generen mensajes de registro usando la función syslog:

registro_syslogLa función syslog envía un mensaje de registro a la prestación de registro.

registro_syslog2Cada mensaje tiene un argumento priority que es un OR a nivel de bit de un intenso nivel y un valor básico.

registro_syslog3El nivel intenso controla el cumplimiento del mensaje de registro y el valor básico registra al creador del mensaje.

Los valores básicos (de syslog.h) incluyen:

  • LOG_USER .- Indica que el mensaje proviene de una aplicación de usuario (la predeterminada).
  • LOG_LOCAL0 (y así hasta LOG_LOCAL7) .- A estos valores el administrador local, puede asignar significados.

registro_niveles_intensidad
Dependiendo de la configuración del sistema, los mensajes LOG_EMERG pueden aparecerse a todos los usuarios, los mensajes LOG_ALERT pueden ser enviados al administrador, los mensajes LOG_DEBUG se pueden ignorar, y el resto pueden ser enviados a un archivo de mensajes. Puede escribir un programa que use la prestación de registro llamando únicamente a syslog cuando desee crear el mensaje de registro.

El mensaje de registro creado por syslog está compuesto por una cabecera de mensaje y un cuerpo de mensaje. La cabecera se crea a partir del indicador de prestación y de la fecha y la hora. El cuerpo del mensaje es creado a partir del parámetro message para syslog, que actúa como una cadena de formato printf. El resto de argumentos de syslog se usan de acuerdo con los especificadores de conversión de estilo printf en la cadena message. Además, se puede usar el especificador %m para insertar la cadena de mensaje de error asociada con el valor actual de la variable de error, errno. Esto puede ser útil para registrar mensajes de error.

 Vamos a escribir el programa syslog.c que intentará abrir un archivo inexistente:

syslog_listadoAl compilar y ejecutar el programa, syslog.c, no verá ninguna salida, pero el archivo /var/log/messages contendrá la siguiente línea en la parte final:

syslog_salida
En este programa, intentamos abrir un archivo que no existe. Cuando falla, llamamos a syslog para registrar el suceso en el registro del sistema.

Tenga en cuenta que un mensaje de registro no indica qué programa llamó a la prestación de registro, sino que registra el hecho de que se llamó a syslog con un mensaje. El especificador de conversión %m ha sido reemplazado por una descripción del error, en este caso, indicando que no se puede encontrar el archivo. Esto resulta más útil que informar simplemente del número de error.

Otras funciones empleadas para alterar el comportamiento de las prestaciones de registro están definidas en syslog.h:

syslog_closelogPuede modificar el método de presentación de sus mensajes de registro mediante una llamada a la función openlog.

syslog_openlog2De esta manera podrá configurar una cadena, ident, que se aplicará a los mensajes de registro.

syslog_identPuede usarla para indicar que programa ha creado el mensaje. El parámetro facility registra un valor de prestación predeterminado que se usará para futuras llamadas a syslog. El valor predeterminado es LOG_USER.

syslog_facility
El parámetro logopt configura el comportamiento de las llamadas futuras a syslog.

syslog_logoptSe trata de un OR a modo de bit con cero o más parámetros en la siguiente tabla.

tabla_parametrosLa función openlog asignará un descriptor de archivo que se usará para escribir a la prestación de registro. Puede cerrarlo mediante la función closelog. Tenga en cuenta que no necesita llamar a openlog antes de llamar a syslog porque syslog abrirá la prestación de registro si fuese necesario.

Puede controlar el nivel de prioridad de sus mensajes de registro estableciendo una máscara de registro mediante setlogmask. A partir de ahí, serán rechazadas todas las llamadas a syslof con niveles de prioridad que no consten en la máscara de registro. De manera que podrá usarla, por ejemplo, para desactivar los mensajes LOG_DEBUG sin tener que alterar el cuerpo del programa.

Puede crear la máscara para los mensajes de registro usando LOG_MASK (priority), que crea una máscara con un solo nivel de prioridad, o LOG_UPTO (priority), que crea una máscara compuesta por todas las prioridades hasta la prioridad específica, inclusive.

atras

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s