콘솔에서 로그 파일 업데이트 모니터링JMP 17.2.0을 사용하여 콘솔(이 경우 Mac OS 터미널)에서 JSL 로그 파일의 출력을 모니터링하려고 합니다. 나는 꼬리 명령을 사용하여 -에프 파일이 작성될 때마다 업데이트를 실시간으로 볼 수 있는 옵션입니다.
$ tail -f log.txt
그러나 새 텍스트가 로그에 기록되면 콘솔 출력은 업데이트되지 않습니다. 아래 샘플 JSL은 매초마다 한 줄의 텍스트를 출력합니다.
Open Log();
Clear Log();
For( ii=0, ii<10, ii++,
Write( "hello, world " || Char( ii ) || "\!n" );
Save Log( "log.txt" );
Wait( 1 );
);
스크립트를 시작하면 다음을 실행합니다. 꼬리 몇 초 후에 명령을 실행하면 예상되는 결과가 나타납니다.
$ tail -f log.txt
/*:hello, world 0
hello, world 1
hello, world 2
hello, world 3
그러나 후속 JSL 로그 메시지는 꼬리 명령. 만약 내가 Ctrl-C 종료한 후 다시 실행하세요. 꼬리 , 그 시점에서 모든 내용이 로그 파일에 올바르게 출력됩니다. 그러나 출력은 다시 업데이트되지 않습니다.
왜 이것이 작동하지 않는지에 대한 생각이 있습니까? 아니면 예상대로 작동하는 로그 파일을 관리하는 다른 방법이 있습니까?
자동화 및 스크립팅맥 OSRe: 콘솔에서 로그 파일 업데이트 모니터링"tail의 powershell 버전"을 사용하면 제대로 작동하는 것 같습니다(파일이 먼저 존재하지 않으면 실행되지 않습니다).
Get-Content -Path "<logfilepath>" -Wait
https://stackoverflow.com/questions/4426442/unix-tail-equivalent-command-in-windows-powershell
나는 다음과 같이 로그를 썼다.
Names Default To Here(1);
For(i = 1, i <= 30, i++,
Show(i);
wait(1);
Save Log("$TEMP/jmplog/log.txt");
);
로그 파일이 생각한 대로 업데이트되고 있는지 수동으로 확인할 수 있으며, 그렇다면 tail에 어떤 문제가 있는지 알아내기 시작할 수 있습니다. 예를 들어 로그 저장이 매번 파일을 다시 생성하고 그로 인해 실시간 추적이 삭제될 수 있습니까?
일반적으로 JMP에서 로그를 작성할 때 다음을 사용합니다. 텍스트 파일 저장() . 먼저 헤더가 있는 파일을 생성한 다음(해당하는 경우) 모드("append")를 사용하여 새 줄을 추가합니다. 전체 로그 내용을 얻으려는 경우에만 Save Log()를 사용했습니다(예: 코드에 오류가 있을 때 로그 저장). 로그 가져오기() 때로는 유용할 수도 있습니다.
편집: -f를 -F로 변경하면 도움이 될 수 있을까요? https://man7.org/linux/man-pages/man1/tail.1.html
-f, --follow[={name|descriptor}]
output appended data as the file grows;
-F same as --follow=name --retry
--retry
keep trying to open a file if it is inaccessibleRe: 콘솔에서 로그 파일 업데이트 모니터링@스티브테리 JMP가 파일을 대체하고 tail이 새 파일을 붙잡을 수 없기 때문이라면(아마도) 대략적인 유사 코드는 다음과 같습니다.
xxx = get log text();
clear log(); // so each chunk is appended only once
savetextfile("log.txt", xxx, mode("append") );
또는 다음과 같은 watch를 사용할 수도 있습니다.
watch tail log.txt
몇 초마다 tail 명령을 다시 실행합니다. 더 쉽지만 효율적이지는 않습니다.
Re: 콘솔에서 로그 파일 업데이트 모니터링감사해요 @jthi , -에프 옵션이 작동하게 만드는 것입니다. 왜 내가 그 부분을 선택하지 않았는지 잘 모르겠습니다. 남성 페이지 — 아마도 내가 계속 사용했기 때문일 것입니다. -에프 수십 년 동안 고정관념에서 벗어나 생각하는 데 열중하지 않았습니다. 참고로, --다시 해 보다 Mac에는 옵션이 없습니다. Linux 환경에서 JMP를 사용하고 있는 것 같나요?? 나는 그것에 대해 더 알고 싶습니다.
나는 사용한다 텍스트 파일 저장() JSL 스크립트를 동적으로 작성하기 위해 반복적으로 꽤 많은 시간이 소요되지만 로그에 전송된 내용을 캡처하지 않기 때문에 여기서는 적절하지 않다고 생각합니다. 예: 쓰다() 그리고 보여주다() , 그래서 이중 작업이 될 것입니다.
@Craige_Hales , 귀하의 제안에 감사드립니다. 참고하세요, 보다 Ubuntu에서는 볼 수 있지만 Mac에는 표시되지 않습니다(어차피 기본 설치의 경우 — 수동으로 설치할 수도 있음). 아, 혹시 JMP와 Linux도 결합하시나요?? ;–)
두 분 모두 지적하신 대로, 로그를 저장하다() 새로운 inode를 제공하는 방식으로 파일을 다시 작성합니다. 꼬리 -f 진다. 이는 매우 비효율적인 것 같습니다. 정기적인 지우기와 같이 많은 로그 버퍼 조작이 진행되는 일부 상황에서 이것이 어떻게 유용할 수 있는지 상상할 수 있습니다. 그러나 내 생각에는 대부분의 응용 프로그램에 대해 미리 할당된 파일에 대한 로그의 버퍼 플러시 메커니즘이 존재한다면 훨씬 더 바람직할 것입니다. 내 코드가 실제로 문제가 됩니다. 로그를 저장하다() 런타임 오류가 발생한 경우 최근 활동을 캡처하기 위해 매우 자주 명령을 실행합니다(따라서 오류가 발생하기 전에 마지막으로 수행한 작업을 식별할 수 있습니다). 이제 디스크 스래싱이 많이 발생하는 것처럼 들립니다. 이것이 제가 제안하고 싶은 새로운 기능일까요?
Re: 콘솔에서 로그 파일 업데이트 모니터링Linux의 VirtualBox에서 실행되는 Windows에서 JMP를 실행합니다. JSL이 Linux와 대화할 수 있나요?예를 들어.
추가하고 싶은 점은 JMP가 로그 창과 병행하여 디스크 파일 로그를 작성하여 모든 라인의 출력을 플러시할 수 있다는 것입니다.
Re: 콘솔에서 로그 파일 업데이트 모니터링저는 Windows에서 JMP를 실행하고 있습니다. 방금 구글링했어요 꼬리 그리고 해당 매뉴얼 페이지를 확인했습니다(로그를 모니터링하기 위해 cygwin과 함께 사용했습니다).
Re: 콘솔에서 로그 파일 업데이트 모니터링누구든 댓글을 달거나 찬성 투표를 하고 싶은 경우를 대비해 위시리스트에 이 기능을 추가했습니다.
https://community.jmp.com/t5/JMP-Wish-List/Provide-option-to-write-log-file-to-disk-in-parallel-with-the/idi-p/701103