La forma estándar de iniciar sesión desde un programa 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 añade automáticamente al inicio de cada mensaje. Pon el nombre de tu programa aquí.
El segundo argumento son las opciones que desea usar, o 0 por el comportamiento normal. La lista completa de opciones está en man 3 syslog . Uno que podría encontrar útil es LOG_PID , lo 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. La prioridad oscila entre DEBUG (menos importante) a EMERG (solo para emergencias) con DEBUG , INFO y ERR siendo el más utilizado. Ver man 3 syslog para sus opciones.
Los argumentos segundo y tercero son un formato y un mensaje, al igual que printf.
El archivo de registro en el que aparece depende de la configuración de syslog.
Con una configuración predeterminada, probablemente entre en /var/log/messages .
Puede configurar un archivo de registro personalizado utilizando una de las funciones en el rango LOG_LOCAL0 a 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 reiniciando el servidor syslog, por ejemplo,
pkill -HUP syslogd
El .info parte de local1.info anterior significa que todos los mensajes que son INFO o más importantes serán registrados, incluyendo INFO , NOTICE , ERR (error), CRIT (crítico), etc., pero no DEBUG .
O, si tiene rsyslog , puede probar un filtro basado en propiedades, por ejemplo,
:syslogtag, isequal, "programname:" /var/log/programname.log
La etiqueta syslog debe contener un ":".
O, si planea distribuir su software a otras personas, probablemente no sea una buena idea confiar en el uso de LOG_LOCAL o un rsyslog filtro.
En ese caso, deberías usar LOG_USER (si es un programa normal) o LOG_DAEMON (si es un servidor), escriba sus mensajes de inicio y mensajes de error usando syslog , pero escribe todos tus mensajes de registro en un archivo fuera de syslog . Por ejemplo, Apache HTTPd registra en /var/log/apache2/* o /var/log/httpd/* , supongo que usando open regular /fopen y write /printf llamadas.
Querrás #include <syslog.h> , luego usa el syslog() funciones para enviar datos a cualquier programa de registro del sistema que esté activo.
Vea la página man aquí.