[SP-pm] Capturar trechos de um arquivo de log
"Flávio R. Lopes"
flavio.lopes at links.inf.br
Wed Mar 16 10:25:24 PDT 2011
Em 16-03-2011 12:04, Eliane Franco escreveu:
> Colega,
>
> Este texto não segue um padrão de numero de linhas no log?
> O ID pelo que entendi não repete, certo?
Sim, minha idéia inicial era localizar no arquivo de Log pela linha onde
existe algum tipo de erro e a partir dela (algumas linhas acima)
identificar o Id do Job e a partir daí selecionar todas as linhas do
Log, ou seja, por um início e pelo fim.
>
> Meu olhar é simples, não de mestre. Então, penso que deveria
> identificar o ID no texto. E fazer as contas da posicao inicial e
> final, ja que saberia o numero de linhas...
> Isso funcionaria, mas não é legal, pq obriga manter um padrão do
> log... o correto é ter um inicio e fim identificado mesmo. Estou só
> aprendendo tbem.
Este é o problema, pois nem sempre segue um padrão (de ter sempre o
mesmo número de linhas).
>
> Abraços,
> Eliane
Mas valeu pelo reply.
Abraço!
>
>
>
>
>
> Em 14 de março de 2011 20:54, "Flávio R. Lopes"
> <flavio.lopes em links.inf.br <mailto:flavio.lopes em links.inf.br>> escreveu:
>
> Ok, obrigado Gabriel.
> Estou "juntando" as idéias aqui com base na sugestão do pessoal.
>
> Abraço,
> Flávio
>
> Em 14-03-2011 09:55, Gabriel Andrade de Santana escreveu:
>
> 2011/3/13 Tiago Peczenyj<tiago.peczenyj em gmail.com
> <mailto:tiago.peczenyj em gmail.com>>:
>
> Flavio
>
> Imagine que vc quer imprimir todas as linhas entre uma
> string X e outra Y.
> Pode ser o começo e o fim de um StackTrace Java por
> exemplo. Vc pode ter uma
> "flag" $imprime quando encontra X e desliga quando encontra Y.
> É uma maquina de estados pois vc tem 2 estados definidos:
> "dentro" e "fora"
> do que vc quer imprimir.
>
> Esse tipo de comportamento, onde uma flag determina se estamos
> dentro
> ou fora de um intervalo, pode ser emulado utilizando o operador de
> intervalo (..) quem em contexto escalar[1][2] age como um
> flip-flop[3]
> armazenando o estado booleano resultante das próximas avaliações.
>
> Em if($linha =~ /foo/ .. $linha =~ /bar/) {} o resultado da
> operação
> será sempre verdadeiro a partir do momento em que $linha contiver
> "foo" e assim permanecerá através das sucessivas chamadas até que
> $linha contenha "bar" e então retornará falso NA PRÓXIMA
> execução do
> teste no bloco if.
>
> A solução do Nelson poderia ser (porcamente) reescrita assim:
>
> ====
> use strict;
> use warnings;
>
> my @buffer;
> my $has_error;
>
> while (<>) {
> if ( /Starting/ .. /End/ ) { # ainda estamos entre
> "Starting" e "End"?
> $has_error = 1 if !$has_error&& m/FAIL|WARNING|ERROR/;
> push @buffer, $_;
> }
> else {
> send_email( \@buffer ), $has_error = 0 if $has_error;
> @buffer = ();
> }
> }
>
> ====
> $ perl script.pl <http://script.pl> arquivo.log
>
> Aviso: esse código tem o intuito de somente demonstrar de forma
> simplista o uso do operador supracitado e não figura como um
> todo um
> exemplo de boas práticas nem como solução definitiva para o
> problema.
> Cabendo, portanto, ao bom entendedor transformar em algo útil as
> minhas meias-palavras. :)
>
>
> [1] http://perldoc.perl.org/perlop.html#Range-Operators
> [2] http://tinyurl.com/ybfanvv
> [3] http://pt.wikipedia.org/wiki/Flip-flop
> =begin disclaimer
> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
> SaoPaulo-pm mailing list: SaoPaulo-pm em pm.org
> <mailto:SaoPaulo-pm em pm.org>
> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
>
>
> =begin disclaimer
> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
> SaoPaulo-pm mailing list: SaoPaulo-pm em pm.org
> <mailto:SaoPaulo-pm em pm.org>
> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
>
>
> =begin disclaimer
> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
> SaoPaulo-pm mailing list: SaoPaulo-pm em pm.org
> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
-------------- Pr?xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20110316/4c602660/attachment.html>
More information about the SaoPaulo-pm
mailing list