-
[C, C++, File] fprintf를 이용한 로깅 관련 매크로 작성프로그래밍/C++ 2019. 7. 4. 17:53
fprintf 를 이용할 때, 주의해야할 점이 있습니다.
꼭..! 반드시...! fflush(filepointer); 를 해주셔야 한다는 점...!
저는 최근, fflush를 누락시킨 것 때문에 제 file에 output이 남질 않아서... 한참을 헤맸었습죠..
방황했던 이유는, fflush를 넣고 분명히 해봤었음에도 불구하고 제대로 동작하질 않.... ㅎ...
뭐 제가 제대로 하지 않았었겠지요. 프로그래머의 잘못입니다.. 녜녜...
격하게 아무것도 아닌 로그 출력용 매크로 위의 이미지를 참고하시어 부디 간단하게 로그를 작성하실 수 있길 빕니다.
다들 아시겠지만, AGENT_LOG("할말%d%s%x", 정수변수, 문자열변수, 16진수변수); 등의 형태로 사용이 가능합니다.
아.. 참고로 File에 쓰기 위해서 pLogFile 을 이용해줬는데, Console 만을 위해서는 stdout/stderr 를 이용하였었드랬쥬.
freopen으로 별도로 띄운 콘솔로 stdout/stderr 를 출력 가능하게 해주는 처리도 했었는데,
이 freopen 방법으로는 File에 써지지 않더군요.. fflush도 이 과정에서 안되길래 빠졌었...
디버그 모드로 빌드시에는 console 출력 및 File 출력을 하구요.
릴리즈 모드로 빌드시에는 File 출력만 하도록 되어있습니다.
pLogFile 변수는 FILE * 형식이며, 헤더에 전역변수로 선언만 먼저 해주고,
main 함수 내에서 fopen_s 함수를 이용해 file을 열어주도록 처리했습니다.
getFormattedTime() 함수의 경우, 시/분/초를 출력해주기 위해 작성하였습니다.
람다 함수로는 작성이 안되더군요.. 제가 못한 것일 수도 있지만....말이죠.....
필요한 헤더는 알려주지 않습니다... 시/분/초를 포맷에 맞춰 출력해줄 수 있도록 했고, 필요하다면 년/월/일/요일 등도 넣을 수 있습니다.
이상으로 삽질의 결과물 기록을 마칩니다.
'프로그래밍 > C++' 카테고리의 다른 글
[C++] 작업표시줄 영역을 제외한 화면의 영역 구하기 (0) 2019.07.23 [C++] 작업표시줄 크기 구하기 (0) 2019.07.23 [c++, VS2013] Visual Studio 2013 Error: c4996 this function or variable may be unsafe (0) 2019.05.24 [C++, rapidjson] AddMember 시의 형변환 문제 (0) 2019.05.14 [C++] std::string convert std::wstring (0) 2019.05.14