Filtrando entradas de log incompletas

1

Estou tentando obter alguns logs de coleta de lixo no Splunk. No entanto, quando java inicia a coleta de lixo, ele inicia a entrada de log e, quando é feito, é colocado no final da entrada. O Splunk trata essas entradas como separadas, então estou tentando usar o cron para alimentar os logs em um arquivo separado e fazer com que o Splunk monitore esse arquivo.

Descobri que as entradas de log incompletas não têm um caractere de feed de linha, então estou tentando usar o grep, sed ou um perl one liner para filtrá-las.

Eu tentei estes

cat <log file> | egrep "\n"
cat <log file> | sed '/\n/p'
perl -pe '/(?:\n|\r)+$/gm' <log file>

Mas, toda vez que eu recebo de volta a linha incompleta (você pode ver o meu prompt no final da terceira linha):

2013-10-11T13:21:43.952-0500: 56511.609: [GC 56511.609: [ParNew: 2457856K->271659K(2765056K), 0.5481470 secs] 5897437K->3711241K(11981056K), 0.5485080 secs] [Times: user=1.21 sys=0.00, real=0.55 secs]
2013-10-11T13:53:17.001-0500: 58404.658: [GC 58404.658: [ParNew: 2729515K->180830K(2765056K), 0.4755270 secs] 6169097K->3747097K(11981056K), 0.4758900 secs] [Times: user=1.29 sys=0.01, real=0.48 secs]
2013-10-11T14:02:56.084-0500: 58983.741: [Full GC (System) 58983.741: [CMS: 3566266K->3504629K(9216000K), 12.7932340 secs] 4444704K->3504629K(11981056K), [CMS Perm : 2082967K->2081438K(3393452K)], 12.7937180 secs][user@host ~]$

Qual método devo usar para corresponder somente as linhas que terminam em um caractere de alimentação de linha (\ n)? Ou existe outra maneira de fazer isso?

    
por tpederson 11.10.2013 / 21:16

1 resposta

0

Você pode conseguir o que quiser com:

perl -ne 'print if /\n/' <log file>

exemplo:

[root@ach tmp]# xxd ble
0000000: 610a 620a 630a 64                        a.b.c.d
[root@ach tmp]# perl -ne 'print if /\n/' ble
a
b
c
[root@ach tmp]#

Seu código perl não funciona porque -p faz o perl imprimir todas as linhas (terminadas pelo caractere \ n ou fim do arquivo). Você faz alguma correspondência de expressão regular, mas não afeta nada.

perl -pe '/(?:\n|\r)+$/gm' <log file>
    
por 16.10.2013 / 19:20