3.6.8. Bitácora de sucesos

vulgo, ¿cómo hago que mis scripts escriban en el registro?

En ciertos scripts puede interesarnos que quede registrada su actividad, sobre todo cuando se ejecutan en segundo plano sin nuestra intervención directa. Lo mejor en estos casos es hacer que el script escriba en el registro y para ello podemos usar una función como ésta que usa la orden logger:

DEBUG=7; INFO=6; NOTICE=5; WARN=4; ERROR=3; CRIT=2
log() {
   eval local etiqueta="$1" level=\$"$1" salida mensaje 
   shift
   mensaje="[$etiqueta] "$*
   salida="${LOGERR:+--no-act -s}"
   
   [ "$level" -le "$CRIT" ] && salida=${salida:-"-s"}

   [ "${LOGLEVEL:-$WARN}" -ge "$level" ] || return 0

   set -- "-p$level" $salida "--id=$$" "$mensaje"
   logger "$@"
}

Para usarla basta con incluir antes del mensaje su nivel de gravedad:

log ERROR "Esto es un error horroroso"
log INFO "Un mensaje de información sin mucha chicha"

Observa el valor de dos variables:

LOGLEVEL

que indica el nivel por debajo del cual se registrarán los mensajes. Por defecto está fijado en el nivel 4, o sea, que cualquier mensaje de warning o más grave, se registrará.

LOGERR

que si no tiene valor nulo propicia que los mensajes en vez de ir al registro, se envíen a la salida de errores. Puede ser útil como complemento a la depuración o cuando ejecutamos el script manualmente. No obstante, los mensajes críticos (o sea, los que obligan a cerrar la aplicación), se escriben en cualquier caso en la salida de errores (y también en el registro, si LOGERROR no tiene valor).