A maneira padrão de fazer logon de um programa em C é syslog
.
Comece incluindo o arquivo de cabeçalho:
#include <syslog.h>
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 é adicionada automaticamente no início de cada mensagem. Coloque aqui o nome do seu programa.
O segundo argumento são 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 o syslog também registrar a identificação do processo na mensagem de log.
Então, sempre que você quiser escrever uma mensagem de log, ligue para syslog
:
syslog(LOG_INFO, "%s", "Message");
O primeiro argumento é a prioridade. As gamas de prioridade DEBUG
(menos importantes) para EMERG
(apenas para situações de emergência) com DEBUG
, INFO
e ERR
sendo a mais utilizada. Veja man 3 syslog
para suas opções.
O segundo e o terceiro argumentos são um formato e uma mensagem, assim como printf.
O arquivo de log em que isso aparece depende das configurações do seu syslog.
Com uma configuração padrão, provavelmente entra /var/log/messages
.
Você pode configurar um arquivo de log personalizado usando um dos recursos no intervalo LOG_LOCAL0
de LOG_LOCAL7
.
Você os usa alterando:
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 .info
parte de local1.info
meios acima que todas as mensagens que são INFO
ou mais importantes serão registrados, incluindo INFO
, NOTICE
, ERR
(erro), CRIT
(crítico), etc., mas não DEBUG
.
Ou, se você tiver rsyslog
, tente um filtro baseado em propriedades , por exemplo
:syslogtag, isequal, "programname:" /var/log/programname.log
O syslogtag deve conter um ":".
Ou, se você planeja distribuir seu software para outras pessoas, provavelmente não é uma boa ideia confiar no uso LOG_LOCAL
ou em um rsyslog
filtro.
Nesse caso, você deve usar LOG_USER
(se for um programa normal) ou LOG_DAEMON
(se for um servidor), escrever suas mensagens de inicialização e mensagens de erro usando syslog
, mas gravar todas as suas mensagens de log em um arquivo fora de syslog
. Por exemplo, o Apache HTTPd registra /var/log/apache2/*
ou /var/log/httpd/*
, suponho que use chamadas / e open
/ regulares .fopen
write
printf