Existe alguma maneira de criar um arquivo de log para manter alguns dados em / var / log / com a ajuda de alguma função de biblioteca ou chamada do sistema na linguagem c no linux. E também quero conhecer os padrões que devemos seguir para escrever e processar o log. obrigado
22
Respostas:
A maneira padrão de fazer logon de um programa em C é
syslog
.Comece incluindo o arquivo de cabeçalho:
No início do seu programa, você deve configurar o syslog chamando
openlog
: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á emman 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
:O primeiro argumento é a prioridade. As gamas de prioridade
DEBUG
(menos importantes) paraEMERG
(apenas para situações de emergência) comDEBUG
,INFO
eERR
sendo a mais utilizada. Vejaman 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
deLOG_LOCAL7
.Você os usa alterando:
para
ou
etc.
e adicionando uma entrada correspondente a
/etc/syslog.conf
, por exemploe reiniciando o servidor syslog, por exemplo
A
.info
parte delocal1.info
meios acima que todas as mensagens que sãoINFO
ou mais importantes serão registrados, incluindoINFO
,NOTICE
,ERR
(erro),CRIT
(crítico), etc., mas nãoDEBUG
.Ou, se você tiver
rsyslog
, tente um filtro baseado em propriedades , por exemploO 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 umrsyslog
filtro.Nesse caso, você deve usar
LOG_USER
(se for um programa normal) ouLOG_DAEMON
(se for um servidor), escrever suas mensagens de inicialização e mensagens de erro usandosyslog
, mas gravar todas as suas mensagens de log em um arquivo fora desyslog
. Por exemplo, o Apache HTTPd registra/var/log/apache2/*
ou/var/log/httpd/*
, suponho que use chamadas / eopen
/ regulares .fopen
write
printf
fonte
rpm -qa | grep syslog
oudpkg -l '*syslog*'
provavelmente lhe dirá qual.sysklogd
era o único jogo na cidade para software syslog. Hoje em dia software comosyslog-ng
,rsyslog
edsyslog
existem e têm capacidades de filtragem muito mais sofisticado do serviço apenas / nível.Você desejará
#include <syslog.h>
usar assyslog()
funções para enviar dados para qualquer programa de registro do sistema que esteja ativo.Veja a página de manual aqui .
fonte
Existem muitas possibilidades, qual é o seu plano? Você só precisa de uma opção para fazer logon na linha de comando? Dê uma olhada
logger
(incluído no bsdutils ). Basta digitar:e registrará algo assim no seu
/var/log/syslog
:ver também
man logger
. Dependendo do seu daemon de log, você pode classificar essas mensagens para arquivos específicos ou filtrá-las por prioridade.Existem também algumas soluções para diferentes linguagens de programação, então, diga-me o que você quer fazer ;-)
fonte
A filtragem pelo nome do programa é escrita de maneira diferente da mencionada acima, para versões recentes de
rsyslog
(a versão na minha máquina é 5.8.6), como mostrado abaixo:Para mais informações, veja aqui
fonte