コード例 #1
0
ファイル: Logger.cpp プロジェクト: G3ronim0/domoticz
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();
}
コード例 #2
0
ファイル: Logger.cpp プロジェクト: sleveque/domoticz
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();
}