2017-12-30 79 views
0

질문이 중복으로 표시 될 수 있지만 끝까지 읽으십시오.임베디드 리눅스 -> 응용 프로그램 로그를 파일로 저장

임베디드 리눅스에서 실행되는 응용 프로그램을 가지고 있으며 응용 프로그램에서 모든 로그를 캡처하고 싶습니다. 나는 with 파일 설명자를 stdout에 대해서는 1, stderr에 대해서는 2로 시도했다. stderr 로그를 캡처 할 수있었습니다. printf 문을 사용하여 로그를 캡처하고 싶습니다. 응용 프로그램이 이미 구축되어 있으므로 변경할 수 없습니다. 임베디드 리눅스이므로 스크립트 유틸리티가 없습니다. 내 신청서에는 printf 기록이 있습니다. 내가 원한다면 셸 명령을 사용하여 캡처하는 것뿐입니다. 나는 다음 시도이 나는 오류 메시지를 캡처 할 수 있었다 명령이 아니라 printf와 메시지를 도와주세요

./application 2>&1 | tee file.txt 
./application >cmd.log 2>&1 
./application | tee log.txt 

명령.

답변

1

첫 번째 두 개의 명령 줄은 실제로 stdinstderr (마지막 명령 줄은 후자를 벗어났습니다)에 전송되는 모든 (어떤 printf 통해 puts를) 잡을 것이다.

콘솔이나 청각 장애, 응용 프로그램 중 하나를 리디렉션에 인쇄 된 메시지 (dup2를 사용하여, 예를 들어) 여전히이있는 경우 stderr 및/또는 다른 장치에 stdout 또는 모두에이 두 파일에 출력을 전송하지 않습니다 (예를 들어 glibc은 특정 오류의 경우 콘솔 장치에 직접 쓰는 것으로 알려져 있습니다).

출력이 실제로 전송되는 위치를 알지 못하면이를 포착 할 수 없습니다. strace을 사용하면이 문자열을 어디로 보내고 있는지 알 수 있습니다.

+0

쉘이 그 메커니즘을 지원하는 bash와 같지만 임베디드 장치에서 쉘이 더 원시적 일 수 있습니다. 응용 프로그램이/dev/console 또는 그와 유사한 것으로 직접 작성할 수도 있습니다. –