Como mesclar a saída de dois arquivos de log em execução em tempo real

3

Eu tenho analisado como um driver USB Linux funciona usando dois métodos diferentes:

  1. examinando a saída de usbmon , que é uma exibição hexadecimal do que está sendo enviado "on the wire".
  2. adicionando printk() declarações à fonte do módulo do driver do kernel e recarregando-a no kernel.

A saída desses métodos está disponível para mim através de cat /sys/kernel/debug/usb/usbmon/1u e cat /var/log/kern.log , respectivamente.

O que eu gostaria agora de fazer é mesclar esses dois arquivos em tempo real, para que eu possa ver as mensagens printk() de registro que inseri no driver do kernel intercaladas com as linhas hexadecimais sendo enviadas pelo fio. Por exemplo, posso colocar uma instrução printk() no início e no final de uma parte do código do driver que eu sei enviar dados USB, e quero ver o hex (de usbmon que foi enviado entre eles, eg

Entering function sendImportantUSBData() // from driver code printk()
0a ff bbbb ac 0993 b3332 // from usbmon log
Exiting function sendImportantUSBData() // from driver code printk()

Eu sei que tail pode mostrar as últimas n linhas de um único arquivo. Eu também sei que a ferramenta multitail pode fazer alguma fusão, embora eu não tenha visto nenhum detalhe relevante sobre a sensibilidade de tempo e o efeito que ela tem na precisão do pedido de mesclagem. Existe uma ferramenta apropriada para o que eu descrevi que a) faz fusão precisa de logs sensíveis ao tempo ou b) permite especificar um intervalo de tempo relativamente pequeno para quando a mesclagem deve ser feita? No último caso, eu provavelmente posso inserir instruções sleep no código do driver em pontos críticos para garantir que a ferramenta de mesclagem tenha tempo de ler minha printk() output antes que o driver passe para a próxima transação USB que geraria mais hexadecimal de usbmon .

    
por Bryce Thomas 05.08.2012 / 10:04

3 respostas

2

Que tal tail -F /sys/kernel/debug/usb/usbmon/1u /var/log/kern.log ? Isso "seguirá" a saída de ambos os arquivos e imprimirá um cabeçalho curto quando a saída de todos os outros arquivos for mostrada.

    
por 05.08.2012 / 12:53
1

Muito fácil se você não quiser uma programação extensiva,

Suponha que você esteja mixando de log1 e log2 , resultando em log :

Monitore o log1 em segundo plano e anexe as alterações ao log tail -f log1 >> log &

Inicie outro monitoramento de processo no log2 tail -f log2 >> log &

Para testemunhar, tente

echo ok1 >> log1; echo ok2 >> log2

Agora, se você marcar log , receberá

ok1

ok2

    
por 06.09.2012 / 17:10
0

mesmo eu estava procurando por este exemplo .. Eu usei isso em uma finalidade diferente e feliz com o resultado. Eu redirecionei a saída para um arquivo como este: tail -F / sys / kernel / debug / usb / usbmon / 1u / var / log / kern.log > > tail.output e três vezes eu estou recebendo saída mesclada de dois logs em tempo real diferentes. thnx muito jippie :-)

    
por 07.08.2012 / 12:55