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

Marcio Ferreira marciodesouzaferreira at gmail.com
Sat Mar 12 21:16:21 PST 2011


Em 13 de março de 2011 01:13, "Flávio R. Lopes"
<flavio.lopes at links.inf.br>escreveu:

> Olá pessoal, tudo bem?
> Seguinte, tenho rodando uma aplicação que gera um arquivo de log no
> seguinte formato (e que seguem um padrão):
>
> 12-Mar 22:56 Id 100: Starting......
> 12-Mar 22:56 Id 100: blablablablablablablablablabla
> 12-Mar 22:56 Id 100: blablablablabla
> .
> .
> .
> Id:              100
> .
> .
> .
> Status:              OK
> .
> .
> .
> 12-Mar 22:57 Id 100: blablablablablablabla
> 12-Mar 22:57 Id 100: blablablablablablablablablablablablabla
> 12-Mar 22:57 Id 100: End
>
> 13-Mar 22:10 Id 101: Starting......
> 13-Mar 22:10 Id 101: blablablablablablablablablabla
> 13-Mar 22:10 Id 101: blablablablablablablablablablablablabla
> .
> .
> .
> Id:              101
> .
> .
> .
> Status:              ERROR
> .
> .
> .
> 13-Mar 22:11 Id 101: blablablablablablabla
> 13-Mar 22:11 Id 101: blablablablablablablablablablablablabla
> 13-Mar 22:11 Id 101: End
>
>
> Minha idéia é gravar num arquivo, os blocos (trechos) que tiveram album
> problema (FAIL, WARNING, ERROR) e posteriormente enviar no meu e-mail.
> Tomando o exemplo acima, nas linhas referentes a tarefa (ID=101) executada
> em 13/03, aconteceu algum problema (Status=ERROR). Então gostaria de copiar
> o bloco compreendido deste o início da linha onde é "startada" a tarefa
> (13-Mar 22:10 Id 101: Starting......) até a última linha desta tarefa
> (13-Mar 22:11 Id 101: End)
>

Hum, eu já passei por algo semelhante, eu a cheguei experimentar
o Text::Balanced[1],
mas não me foi muito eficiente, pq minhas "tags" eram um pouco complexas.

Eu resolvi com expressão regular porque meus *arquivos eram pequenos*

<code conceito>

my $tags = [
    {begin => 'FAIL', end => 'END'},
    {begin => 'WARNING', end => 'END'},
    {begin => 'ERROR', end => 'END'},
 ];

my $log = do { local ( @ARGV, $/ ) = $file; <> };

foreach (@$tags) {
    if ($log =~ m{ $tags->[$_]{begin} (.*?)$tags->[$_]{end}}sx){
         //  do something with $1
    }
}

</code>

Se alguém tiver algo mais robusto e elegante, por favor "postaí".


[1] http://search.cpan.org/~adamk/Text-Balanced-2.02/lib/Text/Balanced.pm



>
> Tentei buscar algum módulo no CPAN, mas acredito que não estou fazendo a
> busca de forma apropriada.
> Alguém pode me dar uma sugestão?
>
> Abraço,
> Flávio
>
> =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/20110313/0718c379/attachment.html>


More information about the SaoPaulo-pm mailing list