2010-07-06 2 views
3

저는 디스크 사용에 대한 매우 엄격한 제약으로 리눅스에서 개발하고 있습니다. 나는 고정 된 크기의 파일 로깅을 지적 할 수 있기를 바랍니다.Linux에서의 디버깅 : pseudo-tty-like 순환 버퍼 구현이 있습니까?

~/bin/myApp > /dev/debug1 

을 한 후, 출력의 마지막 양 볼 : 예를 들어 내 응용 프로그램이 모든 로그를 출력하는 경우, 표준 출력 (있는 경우

cat /dev/debug1 

그러나 많은 바이트 DEBUG1 저장하도록 설정했습니다 쓰는 것을 적어도 그곳에 많은 사람들이 썼음).

This postexpect 또는 그 라이브러리를 사용하고 있지만 더 이상 라이브러리를 내 실행 파일에 바인딩하지 않으려는 사람이 "의사 -ty"장치 드라이버 유형 구현을 본 적이 있는지 궁금합니다.

나는 logrotate과 같은 다른 메커니즘이 있다는 것을 알고 있지만 non-cron 솔루션을 선호합니다.

포인터, 제안, 질문 welcome!

답변

1

아마 당신은 mkfifo과 적절한 버퍼로 파이프를 읽는 것을 사용하여 원하는 것을 얻을 수 있습니다. 시도하지는 않았지만 less --buffers=XXXXXX이 작업 할 수 있습니다.

+0

멋진 제안! 불행히도, 명명 된 파이프로 리다이렉션은 내가 피하려고하는 것을 일으키는 것 같습니다 : 프로세스가 비 대화식 모드에서 시작하고 버퍼 출력 (기본값이 4K 가치라고 생각합니다). –

+1

"비대화 형 모드"라고 말하면 일반 출력물도 해당 명명 된 파이프로 리디렉션되거나 어쨌든 응용 프로그램이 stdout이 리디렉션되어 다른 방식으로 동작한다는 것을 감지합니다 (이는 내가 알지 못하는) ? (표준 입력을 닫음으로써 콘솔 (입력)이 없음을 감지 할 수 있습니다.) 문제가 로그가 stdout에서 일반 출력과 섞여 있다면, 응용 프로그램을 변경하여 대신 stderr에 로그를 보내야합니다 (그리고 리다이렉션을 위해'2>'를 사용하라). – Bruno

+1

로그를 stderr로 바꿀 수 없다면,'script' 명령 (http://linux.die.net/man/1/script)이나' screen '을 선택하고 필요에 맞게 버퍼를 구성하십시오. 또한 로그에 특정 텍스트 패턴이있는 경우 이름이 파이프 된 'tee'(콘솔과 명명 된 파이프 모두에 전송)와 'grep'을 사용하여 일반 출력을 분할 할 수 있습니다. /'grep -v'를 사용하여 출력을 필터링하십시오. – Bruno

관련 문제