9.3. log.h - Sistema de "log"

Este módulo es un conjunto de funciones encargadas de emitir los distintos mensajes de error, advertencias, sucesos ("log") o mensajes de depuración de un modo sencillo y uniforme.


#define LOG_LEVEL_ERROR 0
#define LOG_LEVEL_WARNING 1
#define LOG_LEVEL_LOG 2
#define LOG_LEVEL_DEBUG 3

Descripción. Son constantes que identifican a cada nivel de "log" posible. Cuanto más alto es el número que identifican, menos alta es su prioridad.

#define THIS (char *) __FILE__, (char *) __FUNCTION__

Descripción. Esta constante es muy útil ya que si se puede usar en lugar de los parámetros fichero y funcion, y de esta forma ahorrarse muchos errores debidos al "copy'n'paste" y facilitando la escritura de los mensajes de "log".

Seguidamente se muestra un ejemplo de como usarlo:


#include"backend.h"
#include"log.h"

int fputc_wrapper(int c)
{
  _pdi_log("backend.so", "putchar_wrapper", "putchar escribe '%c'.", c);
  return c;
}

int fputs_wrapper(char *s, FILE *f)
{
  _pdi_log(THIS, "fputs escribe '%s'.", s);
  return 0;
}
          

Las dos indican el fichero al que pertenecen y la función desde donde se imprime el mensaje, sólo que la segunda es más resistente a cambios y más corta.

void _pdi_debug(char *fichero, char *funcion, char *formato, ...);

void _pdi_log(char *fichero, char *funcion, char *formato, ...);

void _pdi_warning(char *fichero, char *funcion, char *formato, ...);

void _pdi_error(char *fichero, char *funcion, char *formato, ...);

Descripción. En este grupo de funciones imprimen todas un mensaje de "log". Sólo les diferencia el nivel de "log" en que cada una imprime el mensaje. En orden respectivo: LOG_LEVEL_DEBUG, LOG_LEVEL_LOG, LOG_LEVEL_WARNING y LOG_LEVEL_ERROR.

Parámetros.

  • fichero. Nombre del fichero con que relacionamos el mensaje de "log", aunque puede ser cualquier otra cosa o NULL en caso de no querer mostrar este campo.

  • funcion. Nombre de la función con que relacionamos el mensaje de "log", aunque puede ser cualquier otra cosa o NULL en caso de no querer mostrar este campo.

  • formato. Cadena de formato en la que intervendrán los parámetros siguientes.

  • ... Lista de parámetros variable. Depende del parámetro formato.

Valor devuelto. Estas funciones no devuelven nada.

void _pdi_log_level(int nivel, char *fichero, char *funcion, char *formato, ...);

Descripción. Esta función imprime un mensaje de "log" en el nivel que se le indique. Es útil cuando la importancia de un mensaje de "log" puede variar en tiempo de ejecución.

Parámetros.

  • nivel. Categoría del mensaje de error. Puede valer LOG_LEVEL_DEBUG, LOG_LEVEL_LOG, LOG_LEVEL_WARNING o LOG_LEVEL_ERROR.

  • fichero. Nombre del fichero con que relacionamos el mensaje de "log", aunque puede ser cualquier otra cosa o NULL en caso de no querer mostrar este campo.

  • funcion. Nombre de la función con que relacionamos el mensaje de "log", aunque puede ser cualquier otra cosa o NULL en caso de no querer mostrar este campo.

  • formato. Cadena de formato en la que intervendrán los parámetros siguientes.

  • ... Lista de parámetros variable. Depende del parámetro formato.

Valor devuelto. Esta función no devuelve nada.