Monitorar arquivo de log em java

4 respostas
ezequiellorenzatti

Estou desenvolvendo um sistema que vai registrar todas as ações do usuário em um log de texto, e no painel de administração haverá uma opção para monitoramento do log.

Já sei como ler o arquivo, até ai tudo certo.

Consigo ler cada linha e mostrar no console, mas no final do arquivo o processo termina, e retornar para o método de chamada.

Gostaria de saber se há como manter o arquivo monitorado.

A ideia é que a cada nova linha adicionada o console seja atualizado, um funcionamento básico como o tail do linux, porem no console do próprio sistema.

A minha questão é como manter o método aguardando uma nova linha no final do arquivo.

4 Respostas

kadu.m.lino

Não tem como!

se vc só tem essa opcao, vc vai ter q ler o arquivo novamente…

pq não salvar no banco?

ou publicar em uma fila(redis http://redis.io/)… e o seu admin consumir essa fila?

rogeriopaguilar

No java 7 tem uma api nova chamada watch service que pode ser utilizada para o que você quer. Tem um exemplo aqui:

http://kalali.me/introducing-nio-2-jsr-203-part-5-watch-service-and-change-notification/

Outra opção é utilizar uma classe que eu escrevi para este fim antes de existir esta opção do java 7 em um projeto que implementei uns anos atrás:

https://github.com/rogeriopaguilar/Projetos/blob/master/projetos/rtail-0.1/src/br/eti/rogerioaguilar/minhasclasses/util/tail/ThreadTail.java

Para utilizar esta classe, basta instanciar ela passando o arquivo e uma implementação da interface br.eti.rogerioaguilar.minhasclasses.util.tail.listener.LogListener, que será notificada sobre as alterações que ocorrerem no arquivo:

as classes

br.eti.rogerioaguilar.minhasclasses.util.tail.console.TailConsole

e

br.eti.rogerioaguilar.minhasclasses.util.tail.ui.TailJanela

contém exemplos sobre como isso pode ser feito.
Para parar a thread que fica monitorando o arquivo, basta setar a flag continuar (setContinuar(false)) da instância da classe ThreadTail criada. A classe TailJanela faz isso também.

Até mais.

aix

kadu.m.lino:
Não tem como!
se vc só tem essa opcao, vc vai ter q ler o arquivo novamente…
pq não salvar no banco?
ou publicar em uma fila(redis http://redis.io/)… e o seu admin consumir essa fila?

ué, e porque não? não seria só pode deixar o processo dentro de uma thread ?

ezequiellorenzatti

rogeriopaguilar agradeço por compartilhar o código, vou estudar o funcionamento e ver se ele se adapta ao que eu preciso.

Criado 2 de janeiro de 2013
Ultima resposta 2 de jan. de 2013
Respostas 4
Participantes 4