void xnLogWriteImplV(const XnChar* /*csLogMask*/, XnLogSeverity nSeverity, const XnChar* csFile, XnUInt32 nLine, const XnChar* csFormat, va_list args) { // take time XnUInt64 nNow; xnOSGetHighResTimeStamp(&nNow); // write timestamp and severity const XnChar* csSeverity = xnLogGetSeverityString(nSeverity); const XnUInt32 nMaxMessageSize = 2047; XnChar csMessage[nMaxMessageSize+1]; XnUInt32 nChars = 0; XnUInt32 nMessageLen = 0; // write timestamp xnOSStrFormat(csMessage + nMessageLen, nMaxMessageSize - nMessageLen, &nChars, "%8llu\t[%s]\t", nNow, csSeverity); nMessageLen += nChars; XnUInt32 nLineInfoBegin = nMessageLen; if (g_xnLoggerData.m_bWriteLineInfo) { // write line info XnChar fileName[XN_FILE_MAX_PATH]; XnStatus nRetVal = xnOSGetFileName(csFile, fileName, sizeof(fileName)); if (nRetVal == XN_STATUS_OK) { xnOSStrFormat(csMessage + nMessageLen, nMaxMessageSize - nMessageLen, &nChars, "%s\t%d\t", fileName, nLine); nMessageLen += nChars; } } XnUInt32 nLineInfoEnd = nMessageLen; // write message xnOSStrFormatV(csMessage + nMessageLen, nMaxMessageSize - nMessageLen, &nChars, csFormat, args); nMessageLen += nChars; XnUInt32 nUserMsgLen = nChars; // write end-of-line xnOSStrFormat(csMessage + nMessageLen, nMaxMessageSize - nMessageLen, &nChars, XN_NEW_LINE_SEP); nMessageLen += nChars; if (g_xnLoggerData.m_bWriteToFile) { xnOSWriteFile(g_xnLoggerData.m_fLogFile, csMessage, nMessageLen); } if (g_xnLoggerData.m_bWriteToConsole) { // Write to console without line info XnChar cSaveChar = csMessage[nLineInfoBegin]; csMessage[nLineInfoBegin] = '\0'; printf("%s", csMessage); csMessage[nLineInfoBegin] = cSaveChar; //printf should know how to translate '\n' to proper newline on every platform so we don't need XN_NEW_LINE_SEP here printf("%s", csMessage + nLineInfoEnd); } }
void XnLogFileWriter::WriteEntry(const XnLogEntry* pEntry) { // make sure file is open if (m_fLogFile == XN_INVALID_FILE_HANDLE) { return; } // write timestamp and severity const XnUInt32 nMaxMessageSize = 2047; XnChar strBuffer[nMaxMessageSize + 1]; XnUInt32 nMessageLen = 0; XnUInt32 nChars = 0; xnOSStrFormat(strBuffer + nMessageLen, nMaxMessageSize - nMessageLen, &nChars, "%9llu\t%-10s\t%s\t", pEntry->nTimestamp, pEntry->strSeverity, pEntry->strMask); nMessageLen += nChars; if (m_bWriteLineInfo) { // write line info XnChar fileName[XN_FILE_MAX_PATH]; XnStatus nRetVal = xnOSGetFileName(pEntry->strFile, fileName, sizeof(fileName)); if (nRetVal == XN_STATUS_OK) { xnOSStrFormat(strBuffer + nMessageLen, nMaxMessageSize - nMessageLen, &nChars, "%s\t%d\t", fileName, pEntry->nLine); nMessageLen += nChars; } } xnOSStrFormat(strBuffer + nMessageLen, nMaxMessageSize - nMessageLen, &nChars, "%s\n", pEntry->strMessage); nMessageLen += nChars; xnOSWriteFile(m_fLogFile, strBuffer, nMessageLen); }