Beispiel #1
0
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);
}
Beispiel #2
0
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();
}
Beispiel #3
0
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);
		}
	}

}