C++ 로그 남기기

1 minute read

코딩을 하다 보면 예상치 못한 동작이나 버그는 피할 수 없다. 매 번 디버깅 모드로 살펴볼 수는 없기 때문에 반드시 로깅하는 부분으로 프로그램에 들어가야한다. 로그를 남길 때 가장 중요한 건 어떤 시점에 발생했는지 확인할 수 있는 시간 정보다. C++에서는 이를 다음과 같은 코드로 ms 단위까지 쉽게 확인할 수 있다.

SYSTEMTIME 조회

로그를 남길 때는 반드시 시간을 남겨서 문제의 선후 관계, 인과관계를 확실히 하여 이슈해결의 실마리를 만들어야 한다.

1
2
3
4
SYSTEMTIME systemTime;
::GetLocalTime(&systemTime);
CString strMsg;
sText.Format(_T("%04d%02d%02d %02d:%02d:%02d:%03d> Logging \n"), systemTime.wYear, systemTime.wMonth, systemTime.wDay, systemTime.wHour, systemTime.wMinute, systemTime.wSecond, systemTime.wMilliseconds);

File 쓰기

또한 로그를 application 상에만 남겼을 경우, 프로그램이 종료되거나 시스템이 종료했을 때 아무 기록도 남지 않는다. 로그는 물리적인 디스크에 기록되는 것이 가장 좋다. C++에서는 File 쓰기도 손쉽게 할 수 있다. fopen_s의 쓰기 속성을 설정할 수 있다. 가장 많이 쓰이는 ‘a+’는 지정한 파일명이 없으면 파일을 생성하고, 있으면 이어붙이는 방식의 파일 쓰기다. txt파일 확장자를 사용하여 로그를 주기적으로 써주면 좋다. 각 프로세스 사이사이에 넣거나, Timer나 thread를 이용하여 시간별로 상태를 적는 등의 방법을 사용한다.

1
2
3
4
5
6
7
8
9
10
FILE *fp;
CString FileName;
CString sText;
char cText[1024];

FileName.Format("%s",cText);
fopen_s(&fp,FileName+".txt","a+");
fprintf(fp,sText);
fclose(fp);

Categories:

Updated: