[SP-pm] Capturar trechos de um arquivo de log

Eliane Franco elidmfranco at gmail.com
Wed Mar 16 08:04:29 PDT 2011


Colega,

Este texto não segue um padrão de numero de linhas no log?
O ID pelo que entendi não repete, certo?

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.

Abraços,
Eliane





Em 14 de março de 2011 20:54, "Flávio R. Lopes"
<flavio.lopes at 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 at 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 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 at 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 at pm.org
> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20110316/67baeb6e/attachment.html>


More information about the SaoPaulo-pm mailing list