Ejemplo n.º 1
0
/*----------------------------------------------------------------------
|   NPT_Log::FormatRecordToStream
+---------------------------------------------------------------------*/
void
NPT_Log::FormatRecordToStream(const NPT_LogRecord& record,
                              NPT_OutputStream&    stream,
                              bool                 use_colors,
                              NPT_Flags            format_filter)
{
    const char* level_name = GetLogLevelName(record.m_Level);
    NPT_String  level_string;

    /* format and emit the record */
    if (level_name[0] == '\0') {
        level_string = NPT_String::FromInteger(record.m_Level);
        level_name = level_string;
    }
    if ((format_filter & NPT_LOG_FORMAT_FILTER_NO_SOURCE) == 0) {
        unsigned int start = 0;
        /* remove source file path if requested */
        if (format_filter & NPT_LOG_FORMAT_FILTER_NO_SOURCEPATH) {
            for (start = NPT_StringLength(record.m_SourceFile);
                 start;
                 --start) {
                if (record.m_SourceFile[start-1] == '\\' ||
                    record.m_SourceFile[start-1] == '/') {
                    break;
                }
            }
        }
        stream.WriteString(record.m_SourceFile + start);
        stream.Write("(", 1, NULL);
        stream.WriteString(NPT_String::FromIntegerU(record.m_SourceLine));
        stream.Write("): ", 3, NULL);
    }
    if ((format_filter & NPT_LOG_FORMAT_FILTER_NO_LOGGER_NAME) == 0) {
        stream.Write("[", 1, NULL);
        stream.WriteString(record.m_LoggerName);
        stream.Write("] ", 2, NULL);
    }
    if ((format_filter & NPT_LOG_FORMAT_FILTER_NO_TIMESTAMP) == 0) {
        NPT_String ts = NPT_DateTime(record.m_TimeStamp, true).ToString(NPT_DateTime::FORMAT_W3C, 
                                                                        NPT_DateTime::FLAG_EMIT_FRACTION | 
                                                                        NPT_DateTime::FLAG_EXTENDED_PRECISION);
        stream.WriteString(ts.GetChars());
        stream.Write(" ", 1);
    }
    if ((format_filter & NPT_LOG_FORMAT_FILTER_NO_FUNCTION_NAME) == 0) {
        stream.WriteFully("[",1);
        if (record.m_SourceFunction) {
            stream.WriteString(record.m_SourceFunction);
        }
        stream.WriteFully("] ",2);
    }
    if ((format_filter & NPT_LOG_FORMAT_FILTER_NO_THREAD_ID) == 0) {
        stream.Write("(", 1, NULL);
        stream.WriteString(NPT_String::FromIntegerU(record.m_ThreadId));
        stream.Write(") ", 2, NULL);
    }
    const char* ansi_color = NULL;
    if (use_colors) {
        ansi_color = GetLogLevelAnsiColor(record.m_Level);
        if (ansi_color) {
            stream.Write("\033[", 2, NULL);
            stream.WriteString(ansi_color);
            stream.Write(";1m", 3, NULL);
        }
    }
    stream.WriteString(level_name);
    if (use_colors && ansi_color) {
        stream.Write("\033[0m", 4, NULL);
    }
    stream.Write(": ", 2, NULL);
    stream.WriteString(record.m_Message);
    stream.Write("\r\n", 2, NULL);
}
Ejemplo n.º 2
0
uint32 CLogManager::GetLogInfo(uint32 nFilter, CLogInfo& oLogInfo, char sLogInfo[FOCP_LOG_MAXMSG])
{
	char* pShift = sLogInfo, * pEnd = pShift+FOCP_LOG_MAXMSG-1;

	if(oLogInfo.sDate[0] == '\0')
		GetLogDate(oLogInfo.sDate);

	pShift[FOCP_LOG_MAXMSG-1] = '\0';
	if(nFilter & FOCP_LOG_HOST)
		pShift += snprintf(pShift, pEnd-pShift, "%s ", m_sHostIp);
	if(nFilter & FOCP_LOG_DATE)
		pShift += snprintf(pShift, pEnd-pShift, "%s ", oLogInfo.sDate);
	pShift += snprintf(pShift, pEnd-pShift, "[%s] ", GetLogLevelName(oLogInfo.nLevel));
	if( (nFilter & FOCP_LOG_APPN) || (nFilter & FOCP_LOG_MODU) )
	{
		pShift += snprintf(pShift, pEnd-pShift, "[");
		if(nFilter & FOCP_LOG_APPN)
		{
			pShift += snprintf(pShift, pEnd-pShift, "%s", oLogInfo.sAppName);
			if(nFilter & FOCP_LOG_MODU)
				pShift += snprintf(pShift, pEnd-pShift, ":");
		}
		if(nFilter & FOCP_LOG_MODU)
			pShift += snprintf(pShift, pEnd-pShift, "%s", oLogInfo.sModuleName);
		pShift += snprintf(pShift, pEnd-pShift, "] ");
	}
	if(nFilter & FOCP_LOG_TASK)
	{
		ulong nTid;
#ifdef WINDOWS
		nTid = GetCurrentThreadId();
#else
		nTid = pthread_self();
#endif
		pShift += snprintf(pShift, pEnd-pShift, "[tid=%lu] ", nTid);
	}
	if( (nFilter & FOCP_LOG_SRCF) || (nFilter & FOCP_LOG_FUNC) )
	{
		pShift += snprintf(pShift, pEnd-pShift, "[");
		if(nFilter & FOCP_LOG_FUNC)
		{
			pShift += snprintf(pShift, pEnd-pShift, "%s", oLogInfo.sFunction);
			if(nFilter & FOCP_LOG_SRCF)
				pShift += snprintf(pShift, pEnd-pShift, "@");
		}
		if(nFilter & FOCP_LOG_SRCF)
			pShift += snprintf(pShift, pEnd-pShift, "%s:%u", oLogInfo.sFileName, oLogInfo.nLine);
		pShift += snprintf(pShift, pEnd-pShift, "] ->\n  ");
	}
	else
		pShift += snprintf(pShift, pEnd-pShift, "-> ");
	char* pShift2 = oLogInfo.sLogInfo;
	while(true)
	{
		char* pNewLine = strchr(pShift2, '\n');
		if(pNewLine)
		{
			pNewLine[0] = '\0';
			if(*(pNewLine-1) == '\r')
				*(pNewLine-1) = '\0';
		}
		pShift += snprintf(pShift, pEnd-pShift, "%s\n", pShift2);
		if(!pNewLine)
			break;
		pShift2 = pNewLine + 1;
		if(!pShift2[0])
			break;
		pShift += snprintf(pShift, pEnd-pShift, "  ");
	}
	return FOCP_LOG_MAXMSG - (pEnd-pShift) - 1;
}
Ejemplo n.º 3
0
void CLogArchiver::GetLogInfo(CLogMsg& oLog, CString &oLogInfo)
{
	CStringFormatter oFmt(&oLogInfo);
	if(m_nFilter & FOCP_LOG_HOST)
		oFmt.Print("%s ", oLog.oHost.GetStr());
	if(m_nFilter & FOCP_LOG_DATE)
	{
		CString oDate;
		CDateTime(oLog.nDate).GetString(oDate);
		oFmt.Print("%s ", oDate.GetStr());
	}
	oFmt.Print("[%s] ", GetLogLevelName(oLog.nLevel));
	if( (m_nFilter & FOCP_LOG_APPN) || (m_nFilter & FOCP_LOG_MODU) )
	{
		oFmt.Print("[");
		if(m_nFilter & FOCP_LOG_APPN)
		{
			oFmt.Print("%u:", oLog.nDMN);
			oFmt.Print("%s:", oLog.oAppName.GetStr());
			oFmt.Print("%u", oLog.nAIN);
			if(m_nFilter & FOCP_LOG_MODU)
				oFmt.Print("-");
		}
		if(m_nFilter & FOCP_LOG_MODU)
			oFmt.Print("%s", oLog.oModuleName.GetStr());
		oFmt.Print("] ");
	}
	if( (m_nFilter & FOCP_LOG_SRCF) || (m_nFilter & FOCP_LOG_FUNC) )
	{
		oFmt.Print("[");
		if(m_nFilter & FOCP_LOG_FUNC)
		{
			oFmt.Print("%s", oLog.oFuncName.GetStr());
			if(m_nFilter & FOCP_LOG_SRCF)
				oFmt.Print("@");
		}
		if(m_nFilter & FOCP_LOG_SRCF)
			oFmt.Print("%s:%u", oLog.oFile.GetStr(), oLog.nLine);
#ifdef WINDOWS
		oFmt.Print("] ->\r\n  ");
#else
		oFmt.Print("] ->\n  ");
#endif
	}
	else
		oFmt.Print("-> ");
	CString oInfo(oLog.oInfo);
	char* pShift = (char*)oInfo.GetStr();
	while(true)
	{
		char* pNewLine = CString::CharOfString(pShift, '\n');
		if(pNewLine)
		{
			pNewLine[0] = '\0';
			if(*(pNewLine-1) == '\r')
				*(pNewLine-1) = '\0';
		}
#ifdef WINDOWS
		oFmt.Print("%s\r\n", pShift);
#else
		oFmt.Print("%s\n", pShift);
#endif
		if(!pNewLine)
			break;
		pShift = pNewLine + 1;
		if(!pShift[0])
			break;
		oFmt.Print("  ");
	}
}