Editar 2016-06-02
Si está intentando encontrar "Mensajes de registro de inicio" en general, verifique /var/log/upstart/
. Ahí es donde ahorra Upstart stdout
y stderr
de los servicios de Upstart. Gracias a la respuesta de leopd por señalar esto.
Si está buscando mensajes de registro de Upstart, configurados initctl log-priority
y emitidos por initctl emit
, ¡siga leyendo!
Version corta
Las entradas de registro deberían aparecer en dmesg. A pesar de eso, no aparecen por defecto en /var/log
.
Si también los quieres /var/log
, $KLogPermitNonKernelFacility on
agrégalos a la configuración de rsyslogd. Sugiero crear un archivo personalizado /etc/rsyslog.d/60-custom.conf
para evitar la edición /etc/rsyslog.conf
, ya que es administrado por dpkg. Ahora los mensajes de Upstart deberían aparecer en /var/log/syslog
, una vez que configure Upstart log-priority
en más info
o menos.
Versión larga
Esto me llevó días localizarlo, pero aparentemente Upstart (1.5) no se registra en syslog, es decir, no llama a la función glibc syslog()
. En cambio, Upstart se registra en el búfer de anillo del núcleo, que es lo que lee dmesg. Ahora, no pensé que fuera posible que los procesos de espacio de usuario escribieran en ese búfer, pero aparentemente pueden hacerlo escribiendo a /dev/kmsg
eso, y eso es exactamente lo que hace Upstart. Esa es la primera parte del rompecabezas.
La segunda parte es que existe una creencia generalizada de que los mensajes escritos en el búfer de anillo del núcleo se copian automáticamente en el registro del sistema (al menos eso es lo que siempre pensé). Resulta que esto lo hace un demonio espacial de usuario, tradicionalmente klogd, que opera en conjunto con syslogd. Obviamente, rsyslogd reemplaza a syslogd pero aparentemente también reemplaza a klogd (más o menos: vea las notas al final).
La tercera parte es que los mensajes escritos en el búfer del anillo del núcleo desde el espacio del usuario en realidad se ven diferentes de los mensajes escritos desde el espacio del núcleo: tienen una facilidad diferente. dmesg tiene algunas opciones que interactúan con esto: -x
mostrará la facilidad (y la prioridad), mientras que -u
y le -k
dirá a dmesg que muestre solo los mensajes de facilidad del usuario y los mensajes de facilidad del núcleo, respectivamente.
Ahora aquí está el factor decisivo: de manera predeterminada, rsyslogd ignora los mensajes con una función que no es del núcleo cuando lee mensajes del búfer de anillo del núcleo. La opción de configuración relevante es $KLogPermitNonKernelFacility
, que está desactivada de manera predeterminada y debe activarse si desea que rsyslogd procese estos mensajes. Tenga en cuenta que el resto de la configuración de rsyslogd tratará todos los mensajes del búfer de anillo del núcleo como si tuvieran la kern
facilidad, independientemente de la facilidad que tenían en el búfer de anillo del núcleo.
Más información
syslog
El código puede escribir en syslog llamando a la función glibc syslog()
, descrita en man 3 syslog
. Aparentemente, estas funciones escriben en /dev/log
. El código puede leerse desde syslog leyendo /dev/log
, y esto es lo que hacen syslogd
y sus reemplazos. rsyslogd
lee /dev/log
usando su imuxsock
módulo de entrada.
Kernel ring buffer
El espacio del kernel escribe en este búfer llamando a la función del kernel printk()
, por lo que a veces se llama el búfer printk. El espacio de usuario puede escribirle escribiendo a /dev/kmsg
. El espacio de usuario puede leer desde este búfer por varios métodos: puede leer /proc/kmsg
(lo que hace dmesg por defecto), o puede leer /dev/kmsg
, o puede llamar a la llamada al sistema syslog()
, que se describe man 2 syslog
y es completamente diferente de la función glibc syslog()
descrita en man 3 syslog
. glibc en realidad proporciona un contenedor para la llamada al sistema syslog()
, llamada klogctl()
, para ayudar a aliviar esta confusión.
Tradicionalmente, klogd
lee desde una de estas interfaces, luego llama a la función glibc syslog()
para copiarlas en el syslog. rsyslogd lee una de estas interfaces a través de su imklog
módulo de entrada, pero AFAIK no se molesta en llamar al glibc syslog()
, por lo que no es exactamente como klogd; solo procesa la salida de la imklog
misma manera que procesa la salida de cualquier otro módulo de entrada. Existe la advertencia adicional de que toda la imklog
salida tiene la kern
facilidad independientemente de los mensajes de la facilidad que tenía en el búfer de anillo del núcleo.
Referencias
dmesg
pero no tenía ningún sentido sin el contexto dado aquí.Encontré el mío en
/var/log/upstart/
fuente
/var/log/upstart/job.log
dondejob
está el nombre de mi trabajo.