2012-10-09 2 views
0

나는 수많은 모터를 실행할 프로그램을 만들고 있습니다. 이 모터는 내 프로그램과 통신하는 모터 컨트롤러와 인터페이스합니다. 나는 각 모터의 상태와 위치뿐만 아니라 상태에 대한 데이터를 주기적으로 모터 컨트롤러에 알려줄 수있다. 이 데이터를 실시간으로 볼 수 있으므로 운영자는 문제가 있는지 쉽게 확인하고이 데이터의 로그를 작성하여 나중에 다시 돌아가서 무엇이 잘못되었는지, 어쩌면 왜 볼 수 있습니다.데이터 로그를 만들기위한 모범 사례

다음과 같은 질문이 있습니다.이 로그를 만들 때 무엇을 고려해야합니까? 나는 대학에서 신선하고 이런 상황을 실제로 경험하지 못했습니다. 물론 파일을 만들고 데이터를 넣은 다음 파일을 닫는 방법을 알고 있지만 데이터 로그에 더 많은 정보가 있습니까? 이미 간주 한

상황은 다음과 같습니다

  1. 각 데이터 레코드에 타임 스탬프를 가지고하는 것이 좋을 것입니다.
  2. 바이너리로 유지하는 것이 아니라 데이터를 장황하게 표시하는 것이 이상적 일 수 있습니다. 설치 시간이 길고 최종 결과가 좋습니다.
  3. 프로그램 종료 방법에 관계없이 파일을 닫아야합니다.
  4. MSFT가이 작업을 직접 수행 할 수있는 몇 가지 프레임 워크를 가지고 있는지 궁금합니다.
  5. 매번 수신 할 때마다 항목을 쓰는 것이 더 나은지 테스트하여 또는 몇 개의 항목이있을 때까지 기다렸다가 한 번에 모두 작성하는 것이 더 나은 경우.

그 밖의 다른 고려 사항은 무엇입니까?

답변

0

이런 식으로 쉼표로 구분되거나 탭으로 구분 된 파일이 마음에 듭니다. 메모장에서 사람이 읽을 수있는 형태로 표시되거나 Excel로 가져 와서 데이터의 그래프를 만들 수 있습니다. (비록 누군가가 CSV 나 탭 SV를 '베스트 프랙티스'에서 멀리 떨어져 있다고 생각하지만, 구현하기 쉽고, 읽기 쉽고, 수백 가지 앱에서 읽을 수있다. 이것은 꽤나 좋은 연습이다. ., 타임 스탬프를 들어

FileStream^ textFileStream = gcnew FileStream(logFileName, FileMode::Append, FileAccess::Write, FileShare::Read); 
StreamWriter^ textFileWriter = gcnew StreamWriter(textFileStream, Encoding::Unicode); 
textFileWriter->AutoFlush = true; 
  1. 단지 DateTime::Now->ToString()을 덤프 : 내 책에서)

    이 비슷한 작업을 수행 할 수 있습니다.

  2. 사용할 수있는 일부 개체는 위를 참조하십시오. String :: Format을 사용하여 출력을 StreamWriter로 보내면 사람이 읽을 수있는 자세한 로그를 얻을 수 있습니다.
  3. 프로그램이 충돌 할 경우 어떤 일이 벌어 질지 염려하면 너무 걱정하지 마십시오. 위에서 초기화 된 StreamWriter는 FileStream을 사용할 때 FileStream에 쓰며 파일 시스템에 쓰게됩니다. 이것은 파일 시스템 수준의 쓰기를 수행하지 않고 파일 시스템 수준의 쓰기 만 수행합니다 (데이터는 나중에 몇 초 안에 디스크에 플러시되도록 OS의 다시 쓰기 캐시에 저장됩니다). 따라서 OS가 충돌하는 경우 , 당신의 로그 파일은 불완전하지만, 프로그램 충돌이 파일로 처리 될 것입니다.
  4. C + +/CLI에서 사용할 수있는 .Net에 사용할 수있는 다양한 로깅 프레임 워크가 있지만 너무 익숙하지 않습니다.
  5. 데이터를 초 단위로 기록하더라도 데이터 일괄 처리에 대해 걱정할 필요가 없습니다. 데이터를 쓰는 데 수백 대의 모터가 있다고 가정 해 봅시다. 초당 1 킬로바이트입니까? 어쩌면 2? 필요에 따라 데이터를 기록하십시오. (디스크/CPU 사용을 최소화하려면 데이터를 10 초당 한 번 또는 분당 한 번씩 덜 자주 기록하는 것을 고려하십시오.)
+0

로그 작성기를 자체 스레드에서 실행하고 로그에 기록 된 데이터로 이벤트를 트리거하는 것이 가장 좋을 것이라고 생각합니다. 나는 오늘 구현을 시작할 것이고, 내가 가지고있는 것처럼 다른 생각들로 돌아갈 것이다, 고마워! – fooOnYou

관련 문제