로그 파일의 패턴을 모니터링하기 위해 다음을 수행하고 싶습니다.
tail -f ./app.log | grep "My Pattern: .*" >> ./MyPattern.txt &
이는 500MB에 도달할 때까지 잘 작동하며 app.log
, 이동되고 app-2015-10-28.0.log
새 파일이 생성됩니다. app.log
이런 일이 발생하면 tail -f
작동이 중지됩니다. 동일한 명령을 중지했다가 다시 실행하면 작동하지만 중지와 시작, 다시 시작 사이에 발생한 패턴이 손실될 수 있습니다.
스크롤의 또 다른 조건은 00:00입니다. 로그가 500MB보다 작은 경우에도 동일한 롤링이 발생합니다.
로그 롤링은 애플리케이션 수준에서 수행되며 우리는 해당 부분을 제어할 수 없습니다.
관심 있는 패턴을 놓치지 않고 로그가 롤링되었는지 어떻게 감지할 수 있나요?
답변1
tail
--follow=descriptor
일반적 으로 로그 파일이 롤링되거나 파일이 이동될 때 액세스할 수 없게 되는 파일 설명자( )가 뒤에옵니다 . 맨페이지에서 이를 확인할 수 있습니다 tail
.
- 재시도
파일에 액세스할 수 없거나 액세스할 수 없게 된 경우에도 파일을 계속 열려고 시도합니다. 즉, --follow=name을 사용하면 유용합니다.
따라서 다음과 같이 사용하십시오( tail
이제 설명자 대신 이름이 뒤에 옵니다).
tail --follow=name --retry logfile | grep "pattern"
파일이 잘리거나 이동되면 tails 출력에 다음이 표시됩니다.
$ tail --follow=name --retry logfile
[...]
tail: logfile: file truncated
[...]
tail: `logfile' has become inaccessible: No such file or directory
tail: `logfile' has appeared; following end of new file
[...]