Lendo dados de um arquivo de log como um aplicativo separado está gravando nele
Pergunta
Gostaria de monitorar um arquivo de log que está sendo gravado por um aplicativo.Quero processar o arquivo linha por linha conforme ou logo após ele ser escrito.Não encontrei uma maneira de detectar se um arquivo foi estendido após atingir o eof.
O código precisa funcionar em Mac e PC e pode estar em qualquer linguagem, embora eu esteja mais familiarizado com C++ e Perl.
Alguém tem uma sugestão sobre a melhor maneira de fazer isso?
Solução
Em Perl, o Arquivo::Cauda módulo faz exatamente o que você precisa.
Outras dicas
Uma resposta genérica o suficiente:
A maioria dos idiomas, no EOF, retorna que nenhum dado foi lido.Você pode tentar ler novamente após um intervalo e, se o arquivo tiver aumentado desde então, desta vez o sistema operacional retornará os dados.
A essência de tail -f
é o seguinte loop:
open IN, $file;
while(1) {
my $line = <IN>;
if($line) {
#process line...
} else {
sleep(1);
seek(IN,0,1);
}
}
close IN;
O procurar chamada é para limpar o sinalizador EOF.
Você deve ser capaz de ler o padrão io de tail -f
Eu teria pensado em gerar as ações via tee e daí seguir (ou usar o loop acima) o arquivo criado por tee é de alguma utilidade.
Para Java veja este excelente artigo
http://www.informit.com/guides/content.aspx?g=java&seqNum=226