프로그래밍/C++

[C, C++, File] fprintf를 이용한 로깅 관련 매크로 작성

Who is JMH 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() 함수의 경우, 시/분/초를 출력해주기 위해 작성하였습니다.

 

람다 함수로는 작성이 안되더군요.. 제가 못한 것일 수도 있지만....말이죠.....

 

필요한 헤더는 알려주지 않습니다...

 

시/분/초를 포맷에 맞춰 출력해줄 수 있도록 했고, 필요하다면 년/월/일/요일 등도 넣을 수 있습니다.

 

이상으로 삽질의 결과물 기록을 마칩니다.