연속 스트림의 마지막 X 라인을 기록하는 방법

연속 스트림의 마지막 X 라인을 기록하는 방법

거의 무한정 실행해야 하는 코드가 있지만 충돌이 발생하는 경우 출력을 보고 싶습니다. Linux에서 어떤 명령이나 명령 조합을 사용하여 명령 stdout의 마지막 X 줄만 저장할 수 있으므로 내 코드가 며칠 동안 실행된 경우 100,000줄의 텍스트 파일로 끝나지는 않습니다. 마지막 문장만요. 벌써 100줄이 출력됐나요?
더 중요한 것은, 이 텍스트 파일에 항상 마지막 100줄 정도만 포함시켜서 코드가 실행되는 동안 언제든지 이를 보면 내 코드가 무엇을 하고 있는지 알 수 있다는 것입니다.

답변1

"링 버퍼"를 찾고 있습니다. Linux에서 허용되는 답변에 대한 Serverfault 자매 사이트 링크:

로그 파일을 순환 버퍼로 변환

답변2

100000줄(각각 100자)은 아직 10MB 정도에 불과하기 때문에 다 저장하고 원하는 내용을 검색하거나 그냥 읽는 것도 불가능합니다 tail.

그러나 모두 저장하고 싶지 않은 경우 몇 가지 옵션이 있습니다. 로그 파일의 경우 로그를 회전하는 것이 일반적입니다. 즉, 파일이 충분히 커지면 이름이 바뀌고 프로그램에 출력을 다시 열고 같은 이름의 새 파일로 이동하라는 알림이 전달됩니다. 프로그램 자체가 이 작업을 수행하는 방법을 모르는 경우 프로그램을 수정해야 할 수도 있습니다. (열린 파일 핸들이 여전히 이름이 바뀐 파일을 가리키기 때문에 단순히 파일 이름을 바꾸는 것만으로는 도움이 되지 않습니다.)

위 문제에 대한 해결 방법: 출력을 syslog로 파이프하고 loggersyslog로 보낸 다음 syslog가 확실히 지원하므로 출력을 로그 회전합니다. 단점: 특정 로그 데이터를 별도의 파일로 구성하는 데 주의를 기울이지 않으면 관련 없는 로그 파일로 로그 파일을 오염시킬 수 있으므로 약간 혼란스럽습니다. 또한 약간의 오버헤드도 추가됩니다.

세 번째: 프로그램을 실행 screen하고 스크롤백 창의 크기를 원하는 크기로 설정합니다. ( screen -h <N>실행할 때나 :scrollback <N>내부 화면을 이용해 크기를 변경합니다. 처음에는 화면을 뒤로 스크롤하는 것이 다소 직관적이지 않을 수 있지만 를 사용할 수 있습니다 :hardcopy -h <filename>.

답변3

가장 쉬운 방법은 프로그램을 단일 파일에 기록한 다음 tail최근에 발생한 일을 보고 싶을 때마다 해당 파일에 대한 명령을 사용하는 것입니다.

답변4

게다가https://github.com/nicupavel/emlog- 그런데 설정이 좀 복잡해요.

관련 정보