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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top