본문 바로가기

프로그래밍(C/S)/MFC

String Format을 이용한 가변 메세지 LOG 파일 남기기

void CXxxx::WriteLogFile(CString sFileName, LPCTSTR pszFormat, ...)
{
 CStdioFile file;
 CString sDate, sTime;
 CString sLogFileName;
 CString str_LogPath;
 CString str_Data;

 CTime   curTime = CTime::GetCurrentTime();

 TCHAR szOutput[256] = {0,};
 va_list argList;
 
 va_start(argList, pszFormat);
 ::_vstprintf(szOutput, pszFormat, argList);
 va_end(argList);

 sDate.Format("%04d%02d%02d_", curTime.GetYear(), curTime.GetMonth(), curTime.GetDay());
 sTime.Format("[%04d/%02d/%02d %02d:%02d:%02d]", curTime.GetYear(), curTime.GetMonth(), curTime.GetDay(), curTime.GetHour(), curTime.GetMinute(), curTime.GetSecond());

 str_LogPath = 폴더명;
 CreateDirectory(str_LogPath, NULL);
 sLogFileName =  str_LogPath + sDate + sFileName + ".txt";

 str_Data.Empty();
 str_Data.Format("%s %s", sTime, szOutput);

 if ( str_Data.GetLength() == 0 )
 {
  return;
 }

 TRY
 {
  if(!file.Open(sLogFileName, CFile::modeCreate | CFile::modeNoTruncate | CFile::modeReadWrite)) return;
  if(file.m_hFile == CFile::hFileNull) return;
  if(file.m_pStream==NULL) return;

  file.SeekToEnd();
  file.WriteString(str_Data);
  file.WriteString("\n");
  file.Close();
 }
 CATCH(CException, e)
 { 
 }
 END_CATCH
}


※ Timer 값을 Milisecond까지 표현하고 싶을때는 아래를 사용하면 된다.

SYSTEMTIME st;
GetLocalTime(&st);
 
sTime.Format("[%02d/%02d %02d:%02d:%02d.%03d]", st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);

'프로그래밍(C/S) > MFC' 카테고리의 다른 글

SYSTEM의 시간을 설정하기  (0) 2011.03.11
SYSTEM의 현재 시간값을 가져오기  (0) 2011.03.10
String Format 형  (1) 2011.03.10
Control 객체들을 XP Style로 변경하기  (0) 2011.03.10
데이터 형식 선언  (0) 2011.03.04