Introducción

Puesto que un daemon se desvincula del fichero STDERR, los mensajes de warning y de error no tienen donde ir a menos que el daemon los vuelque en un fichero de log.

Parece que la palabra 'log' viene de 'grabar en un logbook', que era un dispositivo para medir la velocidad de un barco. La idea de log - en informática - se refiere al registro coordinado de eventos que proporcionan un rastro que pueda ser examinado para diagnosticar la existencia de problemas y su causa. En vez de que cada demonio tenga su propio sistema de log, los sistemas operativos suelen proveer un servicio de log que permite el filtrado y grabado de mensajes de log.

Hay múltiples cuestiones que contestar respecto a como diseñar el logging: ¿Donde escribir nuestro fichero de log? ¿Cómo sincronizar los mensajes de log de los diferentes procesos hijos de un servidor que se ramifica usando fork?

Unix dispone de un sistema de logging conocido como syslog (véase la entrada para syslog en la wikipedia syslog). En Linux el login del núcleo del S.O. corre a cargo de klogd (véase man klogd) el cual puede ser usado en modo standalone o como cliente de syslogd. Syslog se ejecuta como un daemon cuya configuración se controla habitualmente mediante el fichero /etc/syslog.conf. Los mensajes se escriben en ficheros en directorios como /var/log y posiblemente sean replicados a una consola.

Syslog ( syslogd ) también permite que los mensajes sean encaminados hacia otro nodo.

Sigue un ejemplo del fichero de log /var/log/messages:

nereida:~# tail /var/log/messages
May 13 09:31:09 mymachine gconfd (root-25216): Se resolvió la dirección 
   «xml:readonly:/var/lib/gconf/debian.defaults» a una fuente de configuración 
   de sólo lectura en la posición 3
May 13 09:31:09 mymachine gconfd (root-25216): Se resolvió la dirección 
   «xml:readonly:/var/lib/gconf/defaults» a una fuente de configuración 
   de sólo lectura en la posición 4
May 13 09:31:09 mymachine gconfd (root-25216): El servidor GConf no está en uso, 
    cerrándolo.
May 13 09:31:09 mymachine gconfd (root-25216): Finalizando
May 13 10:00:45 mymachine -- MARK --
May 13 10:20:46 mymachine -- MARK --
May 13 10:34:48 mymachine kernel:\
  Shorewall:net2fw:DROP:IN=eth1\
  OUT= MAC=00:0c:6e:35:a2:ff:0f:1b:3f:d6:a8:0f:08:00 SRC=207.44.170.53\
  DST=180.130.145.92 LEN=48 TOS=0x00 PREC=0x00 TTL=112 ID=23898\
  DF PROTO=TCP SPT=4408 DPT=53 WINDOW=65535 RES=0x00 SYN URGP=0\
May 13 10:34:51 mymachine kernel: Shorewall:net2fw:DROP:IN=eth1\
  OUT= MAC=00:0c:6e:35:a2:ff:00:1b:3f:d6:a8:0f:08:00 SRC=207.44.170.53\ 
  DST=180.130.145.92 LEN=48 TOS=0x00 PREC=0x00 TTL=112 ID=24432 DF PROTO=TCP\
  SPT=4408 DPT=53 WINDOW=65535 RES=0x00 SYN URGP=0
May 13 11:00:46 mymachine -- MARK --
May 13 11:19:21 mymachine exiting on signal 15
Las líneas han sido partidas para aumentar la legibilidad. Quizá este no es un buen ejemplo para entender la estructura de un fichero log. Cada mensaje en un fichero log consiste en: He aqui un ejemplo en el que se aprecia mejor el formato:
nereida:~# tail -n 5 -f /var/log/auth.log
May 13 11:10:01 mymachine CRON[31443]: (pam_unix) session closed for user root
May 13 11:15:01 mymachine CRON[31458]: (pam_unix) session opened for user root by (uid=0)
May 13 11:15:01 mymachine CRON[31458]: (pam_unix) session closed for user root
May 13 11:17:01 mymachine CRON[31461]: (pam_unix) session opened for user root by (uid=0)
May 13 11:17:01 mymachine CRON[31461]: (pam_unix) session closed for user root

La opción -f de tail hace que conforme el fichero /var/log/auth.log crece las nuevas líneas se añadan a la salida

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