// 写日志信息 long SysLog::Userlog(unsigned level, const char *fmt, ...) { lock();//加锁是为了写文件不出现混乱 // 调用BeginLog函数,打开日志文件 int ret = BeginLog(); if (ret < 0) { unlock(); return ret; } try{ va_list argptr; va_start(argptr, fmt); #ifdef WIN32 _vsnprintf((char*)&m_strBuf, MAX_LINE_LEN, fmt, argptr); #else vsnprintf((char*)&m_strBuf, MAX_LINE_LEN, fmt, argptr); #endif va_end(argptr); } catch(...) { unlock(); return -2; } // 获取当前线程ID #ifdef WIN32 m_nID = GetCurrentThreadId(); #else m_nID = pthread_self(); #endif string _level; switch(level) { case LOG_INF: _level = "LOG_INF"; break; case LOG_WAR: _level = "LOG_WAR"; break; case LOG_ERR: _level = "LOG_ERR"; break; default: _level = "LOG_INF"; } long size = fprintf(m_pf, "%s [%lu] %s -> %s\n", FormatTime(SysLog::GetSystemTime()).c_str(), m_nID, _level.c_str(), m_strBuf); fflush(m_pf); unlock(); return size; }
long LOGCPP::CLog_T::Userlog(unsigned level,const char *fmt,...) { if (!CanTrace(level)) return 0; lock();//加锁是为了写文件出现混乱 int ret = BeginLog(level); if( ret<0 ) { unlock(); return ret; } try { va_list argptr; va_start(argptr, fmt); #ifdef WIN32 _vsnprintf((char*)&m_strBuf, TBUF_SIZE, fmt, argptr); #else vsnprintf((char*)&m_strBuf, TBUF_SIZE, fmt, argptr); #endif va_end(argptr); } catch (...) { unlock(); return -2; } long size = fprintf(m_pf,"%s\n",m_strBuf); #ifdef _DEBUG Flush(); #endif /***********************/ fflush(m_pf); /************************/ unlock(); return size; }