예제 #1
0
void LogHandler::log(const std::string& line, LogLevel level) {
    switch (level) {
    case LL_TRACE:
    {
        LOG4CPLUS_TRACE_STR(log4cplus::Logger::getRoot(), line);
    }
    break;

    case LL_DEBUG:
    {
        LOG4CPLUS_DEBUG_STR(log4cplus::Logger::getRoot(), line);
    }
    break;

    case LL_INFO:
    {
        LOG4CPLUS_INFO_STR(log4cplus::Logger::getRoot(), line);
    }
    break;

    case LL_WARN:
    {
        LOG4CPLUS_WARN_STR(log4cplus::Logger::getRoot(), line);
    }
    break;

    case LL_ERROR:
    {
        LOG4CPLUS_ERROR_STR(log4cplus::Logger::getRoot(), line);
    }
    break;

    case LL_FATAL:
    {
        LOG4CPLUS_FATAL_STR(log4cplus::Logger::getRoot(), line);
    }
    break;
    }
}
예제 #2
0
BOOL CParserDownloader::ProcessTransferDone(CURLcode res, CDownloadState& dlResultState)
{
	BOOL bRetry = FALSE;
	DWORD dwCurrState = m_pContext->GetState();
	//log
	CString szLog;
	if(IS_LOG_ENABLED(THE_LOGGER, log4cplus::DEBUG_LOG_LEVEL))
	{
		szLog.Format("Task[%02d]: State: %s, Transfer result: %s", m_dlParam.m_nTaskID, 
			CCommonUtils::State2Str(dwCurrState), CCommonUtils::CurlCode2Str(res));
		LOG4CPLUS_DEBUG_STR(THE_LOGGER, (LPCTSTR)szLog)
	}

	//First close connection, this function doesn't change "m_dlInfo" data
	CloseConnection();
	
	dlResultState.SetState(TSE_COMPLETE);

	if(dwCurrState == TSE_DESTROYING)
	{
		dlResultState.SetState(TSE_DESTROYED);
	}
	else if(dwCurrState == TSE_PAUSING)
	{
		dlResultState.SetState(TSE_PAUSED);
	}
	else if(dwCurrState == TSE_TRANSFERRING)
	{
		switch(res)
		{
		case CURLE_OK:
			{
				//This case should rarely happen
				if(m_connInfo.m_headerInfo.m_nHTTPCode != 200)
				{
					bRetry = RestartConnection(CCommonUtils::INT_OPER_INCREASE);
					
					if(!bRetry)
					{
						dlResultState.SetState(TSE_END_WITH_ERROR, m_connInfo.m_headerInfo.m_szStatusLine);
					}
					szLog.Format("Task[%02d]: [Server Error]: %s. Retry=%d", m_dlParam.m_nTaskID, 
						m_connInfo.m_headerInfo.m_szStatusLine, bRetry);
					LOG4CPLUS_ERROR_STR(THE_LOGGER, (LPCTSTR)szLog)
				}
			}
			break;
		case CURLE_ABORTED_BY_CALLBACK:
			{
				szLog.Format("Task[%02d]: Connection stopped by abort callback. Unexpected State: %d", 
					m_dlParam.m_nTaskID, dwCurrState);
				LOG4CPLUS_FATAL_STR(THE_LOGGER, (LPCTSTR)szLog)
					
				ASSERT(FALSE);
			}
			break;
		case CURLE_WRITE_ERROR:
			{
				if(m_connInfo.m_headerInfo.m_nHTTPCode != 200)
				{
					dlResultState.SetState(TSE_END_WITH_ERROR, m_connInfo.m_headerInfo.m_szStatusLine);
				}
				if(IS_LOG_ENABLED(THE_LOGGER, log4cplus::DEBUG_LOG_LEVEL))
				{
					szLog.Format("Task[%02d]: Connection stopped by write data function", m_dlParam.m_nTaskID);
					LOG4CPLUS_DEBUG_STR(THE_LOGGER, (LPCTSTR)szLog)
				}
			}
			break;
		case CURLE_OPERATION_TIMEDOUT:
			{
				//Always retry
				bRetry = RestartConnection(CCommonUtils::INT_OPER_KEEP, CCommonUtils::MAX_INTEGER);
				if(IS_LOG_ENABLED(THE_LOGGER, log4cplus::DEBUG_LOG_LEVEL))
				{
					szLog.Format("Task[%02d]: Timeout, retry [%d]", m_dlParam.m_nTaskID, (int)bRetry);
					LOG4CPLUS_DEBUG_STR(THE_LOGGER, (LPCTSTR)szLog)
				}
			}
			break;
		default:
			{
				bRetry = RestartConnection(CCommonUtils::INT_OPER_INCREASE);
				if(!bRetry)
				{
					dlResultState.SetState(TSE_END_WITH_ERROR, CCommonUtils::CurlCode2Str(res));
				}

				if(IS_LOG_ENABLED(THE_LOGGER, log4cplus::DEBUG_LOG_LEVEL))
				{
					szLog.Format("Task[%02d]: Retry=[%d], times = %d", m_dlParam.m_nTaskID, (int)bRetry, m_connInfo.m_nRetry);
					LOG4CPLUS_DEBUG_STR(THE_LOGGER, (LPCTSTR)szLog)
				}
			}
			break;
		}
	}