试试这个吧,没必要那么复杂吧
#include "stdafx.h"
#include
#include
#define MAX_LOGBUFFER 4096
#define LOGFILENAME _T("logfile.log")
void CDECL Log(TCHAR *szFormat, ...)
{
va_list ap;
DWORD dwBytesWritten = 0;
TCHAR szLogFile[MAX_PATH] = { 0 };
if (0 == GetModuleFileName(NULL, szLogFile, MAX_PATH))
return;
*(_tcsrchr(szLogFile, _T('\\')) + 1) = _T('\0');
_tcscat_s(szLogFile, LOGFILENAME);
TCHAR *szDbgBuffer = new TCHAR [MAX_LOGBUFFER];
if (!szDbgBuffer)
return;
ZeroMemory(szDbgBuffer, MAX_LOGBUFFER*sizeof(TCHAR));
SYSTEMTIME st;
GetLocalTime(&st);
_stprintf_s(szDbgBuffer, MAX_LOGBUFFER,_T("%04u/%02u/%02u [%02u:%02u:%02u.%03u] - "), st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
va_start(ap, szFormat);
_vstprintf_s(szDbgBuffer + _tcslen(szDbgBuffer), MAX_LOGBUFFER - _tcslen(szDbgBuffer), szFormat, ap);
va_end(ap);
HANDLE hFile = CreateFile(szLogFile, GENERIC_WRITE,
FILE_SHARE_WRITE,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if (INVALID_HANDLE_VALUE != hFile){
DWORD dwBytesWrite = _tcslen(szDbgBuffer)*sizeof(TCHAR);
SetFilePointer(hFile, 0, NULL, FILE_END);
WriteFile(hFile, szDbgBuffer, dwBytesWrite, &dwBytesWritten, NULL);
CloseHandle(hFile);
hFile = INVALID_HANDLE_VALUE;
}
delete[] szDbgBuffer;
}