cria um arquivo de log

19

Existe alguma maneira de fazer um arquivo de log para manter alguns dados em / var / log / com a ajuda de alguma função de biblioteca ou chamada de sistema em linguagem c no linux. E também quero conhecer os padrões que devemos seguir para escrever e processar log. Obrigado

    
por Sushant Jain 25.04.2011 / 07:12

4 respostas

28

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 .

    
por 25.04.2011 / 08:08
2

Você vai querer #include <syslog.h> , então use as funções syslog() para enviar dados para qualquer programa de registro do sistema que esteja ativo.

Veja a página do manual aqui .

    
por 25.04.2011 / 08:19
1

Existem muitas possibilidades, qual é o seu plano? Você só precisa de uma opção para fazer o log da linha de comando? Dê uma olhada em logger (incluído em bsdutils ). Basta digitar:

usr@srv % logger test

e ele registrará algo assim em seu /var/log/syslog :

Apr 25 07:55:15 localhost usr: test

veja também man logger . Dependendo do seu daemon de registro, você pode classificar essas mensagens para arquivos específicos ou filtrá-los por prioridade.

Existem também algumas soluções para diferentes linguagens de programação, então, por favor, me diga o que você quer fazer; -)

    
por 25.04.2011 / 08:07
1

A filtragem por nome de programa é escrita de forma diferente da mencionada acima, para versões recentes de rsyslog (a versão na minha máquina é 5.8.6), conforme mostrado abaixo:

if $programname == 'popa3d' then /var/log/popa3d.log

Para mais informações, veja aqui

    
por 30.04.2012 / 23:26