void logPrintf(int level, const char* format, ...) { char* buf = (char*)malloc(LOG_BUF_SIZE * sizeof(char)); assert(buf != NULL); va_list p; va_start(p, format); int n = vsnprintf(buf, LOG_BUF_SIZE - 1, format, p); assert(n > 0 && n < LOG_BUF_SIZE); va_end(p); pushLog(logger->queue, buf, n, level); }
void CLogTextCtrl::pushLog(const CMessage* log) { this->Freeze(); if (typeid(*log) == typeid(CChatMessage)){ pushLog(dynamic_cast<const CChatMessage*>(log)); } else if (typeid(*log) == typeid(CJoinMessage)){ pushLog(dynamic_cast<const CJoinMessage*>(log)); } else if (typeid(*log) == typeid(CPartMessage)){ pushLog(dynamic_cast<const CPartMessage*> (log)); } else if (typeid(*log) == typeid(CTopicMessage)){ pushLog(dynamic_cast<const CTopicMessage*>(log)); } else if (typeid(*log) == typeid(CMemberMessage)){ pushLog(dynamic_cast<const CMemberMessage*>(log)); } else if (typeid(*log) == typeid(CInviteMessage)){ pushLog(dynamic_cast<const CInviteMessage*>(log)); } else if (typeid(*log) == typeid(CKickMessage)){ pushLog(dynamic_cast<const CKickMessage*>( log)); } this->Newline(); GetCaret()->Hide(); this->Thaw(); }
void LogerManager::run() { _runing = true; pushLog(0, LOG_LEVEL_ALARM, "----------------- log4z thread started! ----------------------------", NULL, 0); for (int i = 0; i <= _lastId; i++) { if (_loggers[i]._enable) { std::stringstream ss; ss <<"logger id=" <<i <<" key=" <<_loggers[i]._key <<" name=" <<_loggers[i]._name <<" path=" <<_loggers[i]._path <<" level=" << _loggers[i]._level <<" display=" << _loggers[i]._display; pushLog(0, LOG_LEVEL_ALARM, ss.str().c_str(), NULL, 0); } } _semaphore.post(); LogData * pLog = NULL; int needFlush[LOG4Z_LOGGER_MAX] = {0}; time_t lastCheckUpdate = time(NULL); while (true) { while(popLog(pLog)) { // _ullStatusTotalPopLog ++; //discard LoggerInfo & curLogger = _loggers[pLog->_id]; if (!curLogger._enable || pLog->_level <curLogger._level ) { delete pLog; pLog = NULL; continue; } if (curLogger._display && !LOG4Z_ALL_SYNCHRONOUS_OUTPUT) { showColorText(pLog->_content, pLog->_level); } if (LOG4Z_ALL_DEBUGOUTPUT_DISPLAY && !LOG4Z_ALL_SYNCHRONOUS_OUTPUT) { #ifdef WIN32 OutputDebugStringA(pLog->_content); #endif } if (curLogger._outfile && !LOG4Z_ALL_SYNCHRONOUS_OUTPUT) { if (!openLogger(pLog)) { delete pLog; pLog = NULL; continue; } curLogger._handle.write(pLog->_content, pLog->_contentLen); curLogger._curWriteLen += (unsigned int)pLog->_contentLen; needFlush[pLog->_id] ++; _ullStatusTotalWriteFileCount++; _ullStatusTotalWriteFileBytes += pLog->_contentLen; } else if (!LOG4Z_ALL_SYNCHRONOUS_OUTPUT) { _ullStatusTotalWriteFileCount++; _ullStatusTotalWriteFileBytes += pLog->_contentLen; } delete pLog; pLog = NULL; } for (int i=0; i<=_lastId; i++) { if (_loggers[i]._enable && needFlush[i] > 0) { _loggers[i]._handle.flush(); needFlush[i] = 0; } if(!_loggers[i]._enable && _loggers[i]._handle.isOpen()) { _loggers[i]._handle.close(); } } //! delay. sleepMillisecond(100); //! quit if (!_runing && _logs.empty()) { break; } if (_hotUpdateInterval != 0 && time(NULL) - lastCheckUpdate > _hotUpdateInterval) { updateConfig(); lastCheckUpdate = time(NULL); } } for (int i=0; i <= _lastId; i++) { if (_loggers[i]._enable) { _loggers[i]._enable = false; closeLogger(i); } } }