Como adicionar um timestamp a cada linha de um arquivo de log?

4

Eu tenho um programa externo que não posso editar. Ele grava seu log em um arquivo.

Como adiciono um registro de data e hora a cada linha enquanto o programa grava no arquivo de registro?
Ele não grava sua saída para stdout. O timestamp deve incluir pelo menos segundos. De preferência usando apenas ferramentas padrão do Linux, como pipes, bash, cron etc.

Depois de testar alguns scripts de exemplo, notei que o programa fecha o arquivo de log para recarregar sua configuração e, em seguida, recria o mesmo arquivo que um arquivo de texto vazio. Eu acho que isso significa que tem que usar uma outra abordagem, como continuamente (cron) rechecking o conteúdo do arquivo?

    
por dirty bit 30.09.2011 / 20:13

2 respostas

4

Você pode criar um fifo e configurar seu programa para gravar o log dele?

Se sim, crie o fifo e escreva um script de shell simples que leia a partir dele e grave no arquivo de log antes de um registro de data e hora. Algo como:

#!/bin/sh
FIFOFILE=/tmp/program_log.fifo
LOGFILE=/var/log/program.log

mkfifo $FIFOFILE
awk '{printf("%s - %s\n", systime(), $0);}' < $FIFOFILE > $LOGFILE

segunda versão

Se o seu programa faz a rotação do log e exclui periodicamente o fifo, você tem que usar outra maneira.

Você pode usar tail para monitorar o arquivo de log do programa. Note que a cauda verifica periodicamente o arquivo assim (se você tiver muito azar) você pode perder alguma linha de registro.

#!/bin/sh
PROGRAMLOGFILE=/tmp/program.log
MARKEDLOGFILE=/var/log/program.log

tail -F $PROGRAMLOGFILE \
    | awk '{printf("%s - %s\n", systime(), $0);}' \
    > $MARKEDLOGFILE
    
por 30.09.2011 / 20:31
1

Com base na ideia de syslog no meu comentário:

tail -n1 -q -f --retry $YOURFILE 2>/dev/null |logger

Isto parece funcionar com o CentOS 5. Veja suas páginas de manual locais para cauda e madeireiro.

No CentOS há um aviso sobre o uso de "--retry" que vai para stderr e tem que ser suprimido.

Com logger , você pode enviar mensagens para o syslog - que, por sua vez, normalmente preenche um carimbo de data / hora.

    
por 01.10.2011 / 22:04

Tags