2013-09-03 3 views
2

NLog에서 만든 파일에 로그를 쓰는 응용 프로그램이 있습니다. 그리고 Log Viewer라는 또 다른 응용 프로그램이 있습니다. 위에서 언급 한 로그 파일을 열고 읽을 수 있습니다. 그러나 여기에는 약간의 문제가 있습니다. 로그 뷰어가 로그 파일을 읽는 동안 첫 번째 응용 프로그램에서 로그 파일을 쓰고 있지만 일부 로그 라인은 로그 뷰어에서 볼 수 없습니다. 예를 들어 첫 번째 응용 프로그램이 매 밀리 초 단위로 로그를 기록하면 로그 뷰어에서 새 로그 행을 추적 할 수없고 그 중 일부를 누락 할 수 있습니다. 새로운 로그 라인을 추적 할 수있는 온라인 로그 뷰어가 필요합니다. 모든 메소드 호출시 파일의 모든 텍스트를 읽지 않으려 고합니다. 새로운 로그 라인을 읽어야합니다.NLog에서 만든 로그 파일을 읽고 동시에 쓰십시오.

+0

파일을 잠 가야합니다. 읽고 쓰기 전에 글쓰기를 끝내십시오. –

+0

또는 .net 4.0에서 도입 된'System.Collections.Concurrent.BlockingCollection '를 사용하여 두 작업을 모두 비동기 적으로 수행 할 수 있습니다. –

답변

3

로그 라인이 새로운 것을 알 수있는 유일한 방법은 파일의 어느 위치에서 마지막인지 아는 것입니다 읽기 (예 : "int lastposition = 0;" ) 파일 끝까지 읽어야합니다. "파일 끝"의 위치는 파일 길이와 같습니다. 파일 블록을 읽었을 때 뷰어에서 읽은 것을 보여주고 변수 위치에 마지막 위치를 저장합니다. 다음에 시작해야하는 곳에서 뷰어가 읽는 중입니다.

뷰어가 파일을 열 수없는 경우 ... 다른 이야기.

+0

어떤 코드가 실제로 appericated 것입니까? 이것은 일반적인 문제이며 귀하의 솔루션은 저를 좋아합니다. – rahularyansharma

3

두 응용 프로그램이 동일한 로그를 공유하면 문제가 발생할 수 있습니다. 아마도 가장 쉬운 해결책은 뷰어가 원본 로그 파일을 복사하여 자신의 전용 복사본임을 확인하는 것입니다. 때때로 실제 로그 파일에 업데이트가 있는지 확인하고 그에 따라 새 복사본을 만들 수 있습니다.

동일한 파일에 액세스하면 잠금이 필요하며 파일을 쓸 수 없으면 (차단, 로그 항목 손실 또는 예외 생성) 응용 프로그램에 문제가 발생할 위험이 있습니다.

0

최상의 솔루션은 데이터베이스에 대한 NLog 대상을 설정하는 것입니다. 마지막으로 업데이트 된 행을 추적하는 것이 파일 위치를 추적하는 것보다 쉽고 안전합니다. 파일 활성 로그 파일을 읽고 쓰는 것을 모두 공유하지 않는 것이 좋습니다.

How to set up NLog Database target.

관련 문제