¿Hay alguna manera de hacer un archivo de registro para mantener algunos datos en / var / log / con la ayuda de alguna función de biblioteca o llamada al sistema en lenguaje c en linux? Y también quiero saber los estándares que debemos seguir para escribir y procesar el registro. Gracias
22

Respuestas:
La forma estándar de iniciar sesión desde un programa en C es
syslog.Comience por incluir el archivo de encabezado:
Luego, al principio de su programa, debe configurar syslog llamando a
openlog:El primer argumento es la identificación o la etiqueta, que se agrega automáticamente al comienzo de cada mensaje. Pon el nombre de tu programa aquí.
El segundo argumento son las opciones que desea utilizar, o
0para el comportamiento normal. La lista completa de opciones está enman 3 syslog. Uno que puede encontrar útil esLOG_PIDque hace que syslog también registre la identificación del proceso en el mensaje de registro.Luego, cada vez que desee escribir un mensaje de registro, llame a
syslog:El primer argumento es la prioridad. Los rangos de prioridad de
DEBUG(menos importante) aEMERG(sólo para emergencias) conDEBUG,INFOyERRse utilizan los más comúnmente. Verman 3 syslogpara sus opciones.Los argumentos segundo y tercero son un formato y un mensaje, al igual que printf.
En qué archivo de registro aparece esto depende de la configuración de syslog.
Con una configuración predeterminada, probablemente entra
/var/log/messages.Puede configurar un archivo de registro personalizado utilizando una de las instalaciones en el rango
LOG_LOCAL0deLOG_LOCAL7.Los usas cambiando:
a
o
etc.
y agregando una entrada correspondiente a
/etc/syslog.conf, por ejemploy reiniciar el servidor syslog, p. ej.
La
.infoparte delocal1.infomedios anteriores que todos los mensajes que sonINFOo más importante será registrada, incluyendoINFO,NOTICE,ERR(error),CRIT(crítico), etc., pero noDEBUG.O, si lo ha hecho
rsyslog, puede probar un filtro basado en propiedades , p. Ej.El syslogtag debe contener un ":".
O bien, si planea distribuir su software a otras personas, probablemente no sea una buena idea confiar en el uso
LOG_LOCALo en unrsyslogfiltro.En ese caso, debe usar
LOG_USER(si es un programa normal) oLOG_DAEMON(si es un servidor), escribir sus mensajes de inicio y mensajes de error usandosyslog, pero escribir todos sus mensajes de registro en un archivo externosyslog. Por ejemplo, Apache HTTPd inicia sesión en/var/log/apache2/*o/var/log/httpd/*, supongo que usa llamadas regularesopen/fopenywrite/printf.fuente
rpm -qa | grep syslogodpkg -l '*syslog*'probablemente te dirá cuál.sysklogdera el único juego en la ciudad para el software syslog. Hoy en día el software comosyslog-ng,rsyslogydsyslogexisten y tienen capacidades de filtrado mucho más sofisticados que acaba de servicio / nivel.Usted querrá
#include <syslog.h>, luego use lassyslog()funciones para enviar datos a cualquier programa de registro del sistema que esté activo.Vea la página del manual aquí .
fuente
Hay muchas posibilidades, ¿cuál es tu plan? ¿Solo necesita una opción para iniciar sesión desde la línea de comandos? Echa un vistazo a
logger(incluido en bsdutils ). Sólo tipo:y registrará algo como esto en su
/var/log/syslog:véase también
man logger. Dependiendo de su demonio de registro, puede ordenar estos mensajes en archivos específicos o filtrarlos por prioridad.También hay algunas soluciones para diferentes lenguajes de programación, así que dígame qué quiere hacer ;-)
fuente
El filtrado por nombre de programa se escribe de manera diferente a lo mencionado anteriormente, para versiones recientes de
rsyslog(la versión en mi máquina es 5.8.6) como se muestra a continuación:Para más información, mira aquí
fuente