void LogManager::Log(const wxString& msg, int i, Logger::level lv) { // The '\f' FormFeed is used as window clear if( msg.Find(_T('\f')) != wxNOT_FOUND ) { ClearLog(i); wxArrayString subString = GetArrayFromString(msg, _T('\f')); LogInternal(subString.Last(), i, lv); } else { LogInternal(msg, i, lv); } }
void Log(int nLevel, const WCHAR* message) { struct DELAYED_LOG_INFO { int level; ULONGLONG elapsed; std::wstring message; }; static std::list<DELAYED_LOG_INFO> c_LogDelay; static ULONGLONG startTime = CSystem::GetTickCount64(); ULONGLONG elapsed = CSystem::GetTickCount64() - startTime; if (TryEnterCriticalSection(&g_CsLog)) { // Log the queued messages first EnterCriticalSection(&g_CsLogDelay); while (!c_LogDelay.empty()) { DELAYED_LOG_INFO& logInfo = c_LogDelay.front(); LogInternal(logInfo.level, logInfo.elapsed, logInfo.message.c_str()); c_LogDelay.erase(c_LogDelay.begin()); } LeaveCriticalSection(&g_CsLogDelay); // Log the message LogInternal(nLevel, elapsed, message); LeaveCriticalSection(&g_CsLog); } else { // Queue the message EnterCriticalSection(&g_CsLogDelay); DELAYED_LOG_INFO logInfo = {nLevel, elapsed, message}; c_LogDelay.push_back(logInfo); LeaveCriticalSection(&g_CsLogDelay); } }
void Logger::Log(Level level, const WCHAR* source, const WCHAR* msg) { struct DelayedEntry { Level level; ULONGLONG elapsed; std::wstring message; }; static std::list<DelayedEntry> s_DelayedEntries; static ULONGLONG s_StartTime = System::GetTickCount64(); ULONGLONG elapsed = System::GetTickCount64() - s_StartTime; if (TryEnterCriticalSection(&m_CsLog)) { // Log queued messages first. EnterCriticalSection(&m_CsLogDelay); while (!s_DelayedEntries.empty()) { DelayedEntry& entry = s_DelayedEntries.front(); LogInternal(entry.level, entry.elapsed, source, entry.message.c_str()); s_DelayedEntries.erase(s_DelayedEntries.begin()); } LeaveCriticalSection(&m_CsLogDelay); // Log the actual message. LogInternal(level, elapsed, source, msg); LeaveCriticalSection(&m_CsLog); } else { // Queue message. EnterCriticalSection(&m_CsLogDelay); DelayedEntry entry = {level, elapsed, msg}; s_DelayedEntries.push_back(entry); LeaveCriticalSection(&m_CsLogDelay); } }
/* static */ void Log::Error(const wchar_t *format, ...) { wchar_t buffer[2048]; memset(buffer, 0, sizeof(buffer)); va_list args; va_start(args, format); _vsnwprintf_s( buffer, sizeof(buffer) / sizeof(WORD), _TRUNCATE, format, args); LogInternal(L"Error", buffer); }
void ThreadsafeLogSystem::LogVa(va_list args, ELogVerbosity eVerbosity, const char * format) { LogInternal(eVerbosity, format, args); }
void ThreadsafeLogSystem::Log(ELogVerbosity eVerbosity, const char * format, ...) { va_list args; va_start(args, format); LogInternal(eVerbosity, format, args); }