실행 중인 두 로그 파일의 출력을 실시간으로 병합하는 방법

실행 중인 두 로그 파일의 출력을 실시간으로 병합하는 방법

저는 두 가지 다른 방법을 사용하여 Linux USB 드라이버가 어떻게 작동하는지 분석해 왔습니다.

  1. 출력을 확인하십시오 usbmon. 이는 "온라인"으로 전송되는 내용에 대한 16진수 덤프 보기입니다.
  2. 커널 드라이버 모듈 소스에 명령문을 추가 printk()하고 이를 커널에 다시 로드합니다.

cat /sys/kernel/debug/usb/usbmon/1u각각 및 를 통해 이러한 메서드의 출력을 얻을 수 있습니다 cat /var/log/kern.log.

지금 내가 원하는 것은 두 파일을 실시간으로 병합하여 printk()네트워크를 통해 전송되는 16진수 라인과 인터리브된 커널 드라이버에 삽입한 로그 메시지를 볼 수 있는 것입니다. 예를 들어 USB 데이터를 보내는 것으로 알고 있는 드라이버 코드의 시작과 끝 부분에 명령문을 넣을 수 있으며 16진수( 예: 다음에서 보낸 데이터)를 printk()볼 수 있습니다.usbmon

입력 함수 sendImportantUSBData() // 드라이버 코드에서 printk()
0a ff bbbb ac 0993 b3332 // usbmon 로그에서
함수 종료 sendImportantUSBData() // 드라이버 코드에서 printk()

tail단일 파일의 마지막 몇 줄을 표시하는 것이 가능하다는 것을 알고 있습니다 . 또한 타이밍 민감도와 병합된 행 순서의 정확성에 미치는 영향에 대한 관련 세부 정보를 본 적이 없지만 n도구가 일부 병합을 수행할 수 있다는 것도 알고 있습니다 . 시간에 민감한 로그를 정확하게 병합하거나 병합을 위해 비교적 짧은 시간 간격을 지정할 수 있도록 해주는 multitail적합한 도구가 있습니까 ? 후자의 경우, 드라이버 가 .a)b)printk()usbmon

답변1

어때요 tail -F /sys/kernel/debug/usb/usbmon/1u /var/log/kern.log? 이렇게 하면 두 파일의 출력을 "추적"하고 각 파일의 출력을 표시할 때 짧은 헤더를 인쇄합니다.

답변2

프로그래밍을 많이 하고 싶지 않다면 너무 쉽습니다.

log1과 을 혼합한다고 가정하면 log2결과는 다음과 같습니다 log.

백그라운드에서 log1을 모니터링하고 로그에 변경 사항을 추가합니다.tail -f log1 >> log &

log2에서 다른 프로세스 모니터링 시작tail -f log2 >> log &

그것을 증명하려면 시도해보십시오.

echo ok1 >> log1; echo ok2 >> log2

이제 확인하면 log얻을 수 있습니다.

확인 1

확인 2

답변3

비록 이 예를 찾고 있었지만.. 다른 목적으로 사용해 보았는데 결과에 만족했습니다. 출력을 다음과 같은 파일로 리디렉션했습니다.꼬리 -F /sys/kernel/debug/usb/usbmon/1u /var/log/kern.log >> tail.output 초당 3번씩 서로 다른 두 라이브 로그의 병합된 출력을 얻습니다. 지피님 정말 감사합니다 :-)

관련 정보