MFC 환경에서 Log 파일 생성 및 Log 기록 남기기
- C++/MFC
- 2018. 5. 17. 16:59
MFC 환경에서 Log 파일 생성 및 Log 기록하기
이번 장에서는 MFC 환경에서 Log 파일을 어떻게 생성하고 또 사용자가 원하는 Log들을 어떻게 기록하는지에 대한 내용을 알아보도록 하겠습니다.
먼저 MFC 대화상자 기반의 프로젝트를 생성하여 주시고 그 안에 Button 하나를 아래와 같이 배치시켜 주십시오.
그리고 stdafx.h 파일에 아래와 같이 코드를 작성하여 주세요.
|
|
|
그리고 나서 stdafx.cpp 에 앞서 선언한 함수들을 정의해줍니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
// stdafx.cpp : 표준 포함 파일만 들어 있는 소스 파일입니다. // Log.pch는 미리 컴파일된 헤더가 됩니다. // stdafx.obj에는 미리 컴파일된 형식 정보가 포함됩니다.
#include "stdafx.h"
CCriticalSection g_criticalLog; CCriticalSection g_criticalExe;
void Log(int nType, const char* fmt,...) { g_criticalLog.Lock();
static _TCHAR szLog[5096];
FILE *fp = NULL; CTime tm = CTime::GetCurrentTime();
CString strLog = _T(""); CString strPath = _T("");
va_list args; //가변 변수를 읽기 위한 포인터 변수를 선언 SYSTEMTIME cur_time;
if(fmt == NULL) { g_criticalLog.Unlock(); return; }
ZeroMemory(szLog, 5096); //va_start(args, 마지막 고정인수) - 가변 인수를 읽기 위한 준비 (즉, 초기화 해주는 과정이다.) va_start(args, fmt); wvsprintf(szLog, fmt, args); va_end(args);
strPath.Format( "%s\\MainLog\\%s", GetFilePath(), tm.Format( "%Y_%m_%d_%H.log" ) );
fopen_s( &fp, (LPSTR)(LPCSTR)strPath, "a+" );
GetLocalTime( &cur_time ); //현재 시간을 가져온다.
strLog.Format("%04d-%02d-%02d %02d:%02d:%02d:%03ld : ", cur_time.wYear, cur_time.wMonth, cur_time.wDay, cur_time.wHour, cur_time.wMinute, cur_time.wSecond, cur_time.wMilliseconds); //날짜 형식에 맞게 받는다.
if ( fp != NULL ) { switch ( nType ) { case Normal : strLog += _T( "[NORMAL ] : " ); break; case Debug : strLog += _T( "[DEBUG ] : " ); break; case End : strLog += _T( "[End ] : " ); break; case Error : strLog += _T( "[Error ] : " ); break; }
strLog += szLog;
fprintf( fp, "%s\r\n", ( LPSTR )( LPCSTR )strLog ); fflush( fp ); fclose( fp ); } else { CString strErrorMsg; DWORD dwErrNo = GetLastError(); //DWORD - Unsigned Long
strErrorMsg.Format( "LOG FILE Open Fail : Code = [ %d ], ", dwErrNo ); }
g_criticalLog.Unlock(); }
CString GetFilePath() { g_criticalExe.Lock();
static TCHAR pBuf[ 256 ] = { 0, };
memset( pBuf, NULL, sizeof( pBuf ) );
//현재 자신의 실행 경로를 가져오는 함수 -> GetModuleFileName GetModuleFileName( NULL, pBuf, sizeof( pBuf ) );
CString strFilePath;
strFilePath.Format( _T( "%s" ), pBuf );
strFilePath = strFilePath.Left( strFilePath.ReverseFind( _T( '\\' ) ) );
g_criticalExe.Unlock();
return strFilePath; } Colored by Color Scripter
|
그리고 나서 맨 처음에 만들었던 버튼을 클릭했을 때 Log를 기록하도록 하겠습니다. MainDlg.cpp에서 버튼 클릭 이벤트를 만들어 주시고 아래와 같이 내용을 입력하여 주세요.
1 2 3 4 5 6 |
void CLogDlg::OnBnClickedButtonLogWrite() { // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다. Log(Normal, "버튼 클릭 이벤트가 정상적으로 발생되었습니다."); }
|
그리고 실행을 시켜 주시면 아래와 같이 Log 파일이 생성되어 안에 내용이 제대로 기록 된다는 것을 확인하실 수 있습니다.
'C++ > MFC' 카테고리의 다른 글
[C++] CSV 파일을 읽어, MFC 환경에서 ListControl을 이용하여 데이터 보여주는 방법 (0) | 2018.05.30 |
---|---|
C++ MFC 환경에서 공백문자 제거하는 방법 (0) | 2018.05.30 |
MFC에서 스레드 선언 및 사용 법 (5) | 2018.05.17 |
MFC 텍스트 관련함수 응용 (0) | 2018.05.14 |
MFC 사용자 정의 메시지 사용법 (0) | 2018.05.11 |
이 글을 공유하기