2013-02-28 1 views
3

Linux에서 파일의 입력 스트림을 열면 다른 프로세스에서 해당 파일의 이름을 바꿀 수 있습니다. 따라서 파일이 롤오버되면 여전히 스트림에서 읽을 수 있습니다. Windows에서 입력 스트림을 열면 입력 스트림이 닫힐 때까지 해당 파일의 이름을 바꿀 수 없습니다. '이름 바꾸기'프로세스에 영향을주지 않고 파일을 읽으려면 어떻게해야합니까?Windows에서 롤오버 될 로그 파일을 읽는 방법은 무엇입니까?

나는 java.nio.FileChannel을 사용해 보았습니다. 다른 프로세스 (예 : Java 프로세스 읽기 및 메모장 쓰기)로 파일을 읽고 쓰는 작업은하지만 파일 이름은 바꿀 수 없습니다 (예 : Java 프로세스는 읽지 만 이름 바꾸기 명령은 작동하지 않음).

+0

내가 이것을 말할 때 위험한 것처럼 보였지만 프로덕션 배포에 Windows를 사용하지 않는 것이 좋습니다. 솔직히 이건 빙산의 일각에 불과합니다. –

+0

가끔은 그 선택을하지 않습니다. 그리고 java는 Run-anywhere입니다. 맞습니까? 쉬운 일이라면 OS 의존적 인 기능으로 프로그램하는 것이 더 낫습니다. – vikingsteve

+0

기본적으로 '코드 냄새'이지만 동시에 필요한 모든 속성을 제공하는 데이터베이스를 사용하여 동시에 작성되는 파일을 읽지 않을 수도 있습니다. – EJP

답변

1

솔루션의 단순한는 회전을 할 것입니다 노력이 새로 추가 된 라인이 독자를 닫 읽은 후

,이 방법으로 다른 공정 (난 그냥 내 의견 중 하나를 복사하고) 다음과 같은 것 성공. 그러나 로그 순환을 수행하는 프로세스는 다른 프로세스가 프로세스를 읽지 않을 때까지 여러 번 시도해야합니다.

apache commons IO Tailer이 가능합니다.

관련 문제