La forma estándar de iniciar sesión desde un programa en C es syslog
.
Comience por incluir el archivo de encabezado:
#include <syslog.h>
Luego, al principio de su programa, debe configurar syslog llamando a openlog
:
openlog("programname", 0, LOG_USER);
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á en man 3 syslog
. Uno que puede encontrar útil es LOG_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
:
syslog(LOG_INFO, "%s", "Message");
El primer argumento es la prioridad. Los rangos de prioridad de DEBUG
(menos importante) a EMERG
(sólo para emergencias) con DEBUG
, INFO
y ERR
se utilizan los más comúnmente. Ver man 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
de LOG_LOCAL7
.
Los usas cambiando:
openlog("programname", 0, LOG_USER);
a
openlog("programname", 0, LOG_LOCAL0);
o
openlog("programname", 0, LOG_LOCAL1);
etc.
y agregando una entrada correspondiente a /etc/syslog.conf
, por ejemplo
local1.info /var/log/programname.log
y reiniciar el servidor syslog, p. ej.
pkill -HUP syslogd
La .info
parte de local1.info
medios anteriores que todos los mensajes que son INFO
o más importante será registrada, incluyendo INFO
, NOTICE
, ERR
(error), CRIT
(crítico), etc., pero no DEBUG
.
O, si lo ha hecho rsyslog
, puede probar un filtro basado en propiedades , p. Ej.
:syslogtag, isequal, "programname:" /var/log/programname.log
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 un rsyslog
filtro.
En ese caso, debe usar LOG_USER
(si es un programa normal) o LOG_DAEMON
(si es un servidor), escribir sus mensajes de inicio y mensajes de error usando syslog
, pero escribir todos sus mensajes de registro en un archivo externo syslog
. Por ejemplo, Apache HTTPd inicia sesión en /var/log/apache2/*
o /var/log/httpd/*
, supongo que usa llamadas regulares open
/ fopen
y write
/ printf
.