A maneira padrão de fazer login a partir de um programa em C é syslog .
Comece incluindo o arquivo de cabeçalho:
#include <syslog.h>
Em seguida, no início do seu programa, você deve configurar o syslog chamando openlog :
openlog("programname", 0, LOG_USER);
O primeiro argumento é a identificação ou a tag, que é automaticamente adicionada no início de cada mensagem. Coloque o nome do seu programa aqui.
O segundo argumento é as opções que você deseja usar ou 0 para o comportamento normal. A lista completa de opções está em man 3 syslog . Um que você pode achar útil é LOG_PID , o que faz com que o syslog também registre o id do processo na mensagem de log.
Então, toda vez que você quiser escrever uma mensagem de log, você chama syslog :
syslog(LOG_INFO, "%s", "Message");
O primeiro argumento é a prioridade. A prioridade varia de DEBUG (menos importante) a EMERG (somente para emergências), sendo DEBUG , INFO e ERR os mais comumente usados. Veja man 3 syslog para suas opções.
O segundo e terceiro argumentos são um formato e uma mensagem, assim como o printf.
Qual arquivo de log isso aparece depende das configurações do seu syslog.
Com uma configuração padrão, provavelmente vai para /var/log/messages .
Você pode configurar um arquivo de log personalizado usando um dos recursos no intervalo LOG_LOCAL0 to LOG_LOCAL7 .
Você os usa mudando:
openlog("programname", 0, LOG_USER);
para
openlog("programname", 0, LOG_LOCAL0);
ou
openlog("programname", 0, LOG_LOCAL1);
etc.
e adicionando uma entrada correspondente a /etc/syslog.conf , por exemplo
local1.info /var/log/programname.log
e reiniciando o servidor syslog, por exemplo
pkill -HUP syslogd
A parte .info de local1.info acima significa que todas as mensagens que são INFO ou mais importantes serão registradas, incluindo INFO , NOTICE , ERR (erro), CRIT (erro crítico) ), etc., mas não DEBUG .
Ou, se tiver rsyslog , você pode tentar um filtro baseado em propriedade , por exemplo
:syslogtag, isequal, "programname:" /var/log/programname.log
O syslogtag deve conter um ":".
Ou, se você está planejando distribuir seu software para outras pessoas, provavelmente não é uma boa ideia confiar em usar LOG_LOCAL ou um filtro rsyslog .
Nesse caso, você deve usar LOG_USER (se for um programa normal) ou LOG_DAEMON (se for um servidor), gravar suas mensagens de inicialização e mensagens de erro usando syslog , mas gravar todas as suas mensagens de log para um arquivo fora de syslog . Por exemplo, o Apache HTTPd registra em /var/log/apache2/* ou /var/log/httpd/* , suponho que eu esteja usando as chamadas regulares open / fopen e write / printf .