void CLogger::LogNoLF(const _eLogLevel level, const char* logline, ...) { boost::unique_lock< boost::mutex > lock(m_mutex); va_list argList; char cbuffer[1024]; va_start(argList, logline); vsnprintf(cbuffer, 1024, logline, argList); va_end(argList); if (m_lastlog.size()>=MAX_LOG_LINE_BUFFER) m_lastlog.erase(m_lastlog.begin()); std::string message=cbuffer; if (strhasEnding(message,"\n")) { message=message.substr(0,message.size()-1); } m_lastlog.push_back(_tLogLineStruct(level,message)); if (level==LOG_NORM) { std::cout << cbuffer; if (m_outputfile.is_open()) m_outputfile << cbuffer; } else { std::cerr << cbuffer; if (m_outputfile.is_open()) m_outputfile << "Error: " << cbuffer; } std::cout.flush(); if (m_outputfile.is_open()) m_outputfile.flush(); }
void CLogger::LogNoLF(const _eLogLevel level, const char* logline, ...) { boost::unique_lock< boost::mutex > lock(m_mutex); bool bDoLog = false; if (m_verbose_level == VBL_ALL) bDoLog = true; else if ((m_verbose_level == VBL_STATUS_ERROR) && ((level == LOG_STATUS) || (level == LOG_ERROR))) bDoLog = true; else if ((m_verbose_level == VBL_ERROR) && (level == LOG_ERROR)) bDoLog = true; if (!bDoLog) return; va_list argList; char cbuffer[MAX_LOG_LINE_LENGTH]; va_start(argList, logline); vsnprintf(cbuffer, sizeof(cbuffer), logline, argList); va_end(argList); std::string message=cbuffer; if (strhasEnding(message,"\n")) { message=message.substr(0,message.size()-1); } if (m_lastlog.size()>=MAX_LOG_LINE_BUFFER) m_lastlog.erase(m_lastlog.begin()); m_lastlog.push_back(_tLogLineStruct(level,message)); if (!g_bRunAsDaemon) { if ((level == LOG_NORM) || (level == LOG_STATUS)) { std::cout << cbuffer; std::cout.flush(); } else { std::cerr << cbuffer; std::cerr.flush(); } } #ifndef WIN32 if (g_bUseSyslog) { int sLogLevel = LOG_INFO; if (level == LOG_ERROR) sLogLevel = LOG_ERR; else if (level == LOG_STATUS) sLogLevel = LOG_NOTICE; syslog(sLogLevel, "%s", cbuffer); } #endif if (!m_outputfile.is_open()) return; //output to file if ((level==LOG_NORM)||(level==LOG_STATUS)) m_outputfile << cbuffer; else m_outputfile << "Error: " << cbuffer; m_outputfile.flush(); }