/*---------------------------------------------------------------------- | 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); }
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; }
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(" "); } }