¿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
0
para el comportamiento normal. La lista completa de opciones está enman 3 syslog
. Uno que puede encontrar útil esLOG_PID
que 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
,INFO
yERR
se utilizan los más comúnmente. Verman 3 syslog
para 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_LOCAL0
deLOG_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
.info
parte delocal1.info
medios anteriores que todos los mensajes que sonINFO
o 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_LOCAL
o en unrsyslog
filtro.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
/fopen
ywrite
/printf
.fuente
rpm -qa | grep syslog
odpkg -l '*syslog*'
probablemente te dirá cuál.sysklogd
era el único juego en la ciudad para el software syslog. Hoy en día el software comosyslog-ng
,rsyslog
ydsyslog
existen 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