void WriteToLog(TCHAR *buffer) { DWORD written; TCHAR timebuffer[128]; GetTickCount(); if (logfile == NULL) return; SetFilePointer(logfile, 0, 0, FILE_END); if (-1 != logop) { wsprintf(timebuffer, _T("%04d %04d.%03d "), (++logop)%10000, (GetTickCount() / 1000) % 10000, GetTickCount() % 1000); #ifdef _UNICODE #ifdef _RPTW0 _RPTW0(_CRT_WARN, timebuffer); _RPTW0(_CRT_WARN, buffer); #endif #else _RPT0(_CRT_WARN, timebuffer); _RPT0(_CRT_WARN, buffer); #endif WriteFile(logfile, timebuffer, lstrlen(timebuffer)*sizeof(TCHAR), &written, NULL); } WriteFile(logfile, buffer, lstrlen(buffer)*sizeof(TCHAR), &written, NULL); // FlushFileBuffers(logfile); }
void Logger::WriteToLogFile(Entry& entry) { #ifndef _DEBUG if (!m_LogToFile) return; #endif const WCHAR* levelSz = (entry.level == Level::Error) ? L"ERRO" : (entry.level == Level::Warning) ? L"WARN" : (entry.level == Level::Notice) ? L"NOTE" : L"DBUG"; std::wstring message = levelSz; message += L" ("; message.append(entry.timestamp); message += L") "; message += entry.source; message += L": "; message += entry.message; message += L'\n'; #ifdef _DEBUG _RPTW0(_CRT_WARN, message.c_str()); if (!m_LogToFile) return; #endif const WCHAR* filePath = m_LogFilePath.c_str(); if (_waccess(filePath, 0) == -1) { // The file has been deleted manually. StopLogFile(); } else { FILE* file = _wfopen(filePath, L"a+, ccs=UTF-8"); if (file) { fputws(message.c_str(), file); fclose(file); } } }