Pular para o conteúdo

Arquivo de log [RESOLVIDO]

Responder tópico
  • Denunciar
  • Indicar

1. Arquivo de log [RESOLVIDO]

Enviado em 02/05/2013 - 16:44h

Boa tarde pessoal,

tenho um script que inicializa um aplicativo e que para gerar o arquivo de log do aplicativo utilizo um método parecido com o descrito abaixo:

DATE=`/bin/date +%Y%m%d`
/opt/programa/bin/start >> /opt/programa/logs/$DATE.log 2>&1 </dev/null&


Mas me deparei com o seguinte problema, enquanto o aplicativo não for reinicializado o arquivo de log será sempre o mesmo e irá ficar imenso. Gostaria de gerar um arquivo de log por dia. Alguém pode me ajudar nessa dúvida?


Muito obrigado pela ajuda

Responder tópico

2. Re: Arquivo de log [RESOLVIDO]

Melhor resposta

Enviado em 02/05/2013 - 19:27h

Se o programa reabrisse o log automaticamente mediante alguma forma de interação, o logrotate possivelmente seria a reposta definitiva ao problema. Mas, pelo que você mostrou, você está redirecionando, atrvés do shell, uma saída que seria jogada para o terminal.

Se o programa não lhe oferecer um mecanismo de log interno que funcione melhor do que esse redirecionamento manual, eu vejo três soluções imediadas, cada uma com suas desvantagens.

1) Reiniciar a aplicação periodicamente, gerando a saída para arquivos com timestamps distintos. O problema disso é que parar e reiniciar a aplicação causará downtime e possível interrupção de operações em andamento, o que pode ser inaceitável.

2) Redirecionar a saída para um pipe, e ter como receptor desse pipe um programa que rotacione periodicamente o arquivo de saída ou que aceite uma forma de comunicação que permita rotacionar os arquivos assincronamente. A desavantagem é que se o processo com o receptor capotar por algum motivo, não será possível recuperar a saída do pipe com algum outro processo, e pode ser que a aplciação, ao tentar escrever no pipe que não tem mais um recpetor, pode receber um SIGPIPE, que, se não for ignorado, a fará capotar.

3) Redirecionar o log para um FIFO (named pipe), e ter um outro processo lendo desse fifo e se encarregando de encaminhar os logs para arquivos que podem ser, como no caso anterior, rotacionados periódicamente ou assíncronamente. Também como no caso anterior, se o processo que lê o FIFO cair e o transmissor tentar escrever, o transmissor pode tomar um SIGPIPE e morrer. A vantagem, porém, é que é possível reconectar-se ao FIFO como receptor se o receptor original cair, de modo que, se a queda for curta, pode ser que o transmissor nem mesmo a perceba. Além disso, dependendo da aplicação, ela pode ignorar o SIGPIPE (ou você pode fazer com que o shell o ignore antes de disparar a aplicação), mas deve saber que as mensagens de log que eventualmente forem escritas enquanto o receptor estiver caído vão se perder, mesmo que o transmissor não chegue a cair.

Numa máquina normal, é óbvio que nem o transmissor nem o receptor deveriam cair, de modo que as soluções (2) e (3) deveriam lhe atender.

3. Re: Arquivo de log [RESOLVIDO]

Enviado em 02/05/2013 - 17:00h

Pesquise por Logrotate.

4. Re: Arquivo de log [RESOLVIDO]

Enviado em 03/05/2013 - 12:13h

Pessoal obrigado pela ajuda, mas acabei optando pelo cronolog e adicionei o mesmo ao meu script da seguinte maneira:


pgpool -d -n 2>&1 | /usr/local/sbin/cronolog --hardlink=/opt/programa/logs/programa.log '/opt/programa/logs/%Y-%m-%d-programa.log' &

5. Re: Arquivo de log [RESOLVIDO]

Enviado em 03/05/2013 - 13:08h

Não entendi o "obrigado... mas". O que você fez foi usar exatamente a minha segunda sugestão.

Eu não conhecia esse cronolog, mas ele faz quase exatamente o que eu sugeri (falta a opção de rotacionar imediatamente mediante algum evento assíncrono). E ele também padece dos mesmos problemas que eu apontei: se ele cair, pode derrubar a aplicação que está gerando os logs. Fique atento a isso.

Responder tópico

Responder tópico

Entre na sua conta para responder.

Fazer login para responder