2010-08-22 6 views
1

Windows 및 UNIX에서 실행되는 C++ 응용 프로그램 (콘솔)이 있습니다. 이 응용 프로그램은 출력 파일을 사용하여 시스템 호출/인쇄/etc의 자세한 로그 파일을 출력합니다. 새로운 특징이 추가 된 후에 시그널 11/2를 얻는 경우가 있습니다.시스템 충돌시에도 '거의 완료'로그 유지

이제 신호 11이 발생할 때 출력 파일이 제대로 닫히지 않기 때문에 로그 파일에서 '거의 완전한'정보를 얻지 않아도 버그/문제의 근원을 추적 할 수 없습니다. (부분적 또는 0 크기 일뿐입니다)

모든 fprintf 줄 인쇄 후에 flush 명령을 추가하는 것을 고려했습니다. Q :

  1. 실용적인 것으로 생각 되나요?
  2. fflush는 windows platfrom에서 잘 작동합니까?
  3. 시스템이 예기치 않게 중단 될 수있는 동안 로그 파일을 유지하기위한 다른 생각이나 다른 방법은 있습니까?
+0

다른 언어로 나는 물건이 추락 할 수있을 때 플러시를하는 경향이 있습니다. 그러나 플러시는 상황을 느리게 만듭니다. 불안정한 지역에서만 사용하십시오. 또는 메시지를 마이크로 소프트 대기열 또는 안정적인 메모리 내 위치로 덤프 (속도 향상을 위해)하십시오. 물론 가장 좋은 점은 충돌을 파악하고 해결하는 것입니다. –

답변

1

로그 데이터를 파일에 보내지 말고 30 분 안에 만들 수있는 외부 로깅 응용 프로그램에 보내야합니다. 소켓 또는 via 파이프를 통해 또는 SendMessage() Windows API를 사용하여 출력을 보낼 수 있습니다 (Windows를 대상으로하는 경우).