mark:webrtc 日志写文件方法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/CrystalShaw/article/details/97137693

一、定义类

class FileLog : public rtc::LogSink {
  public:
    FileLog(const std::string& LogPath)
      :logfile_(NULL),
      log_path_(LogPath){}
    
    virtual ~FileLog() {
      if (logfile_) {
        fclose(logfile_);
        logfile_ = NULL;
      }
    }
  
    inline void FileDate() {
      QString timeString = QDateTime::currentDateTime().toString("yyyy-MM-dd_hhmmss");
      logfileName_ = log_path_+"/webrtc_"+timeString.toStdString()+".log";
    }
    
    inline size_t Size()
    {
      size_t size = 0;
      if (logfile_ != NULL) {
        size = filelength(fileno(logfile_));
      }
      return size;
    }
  
    inline void Start(void)
    {
      #define MAX_LOG_FILE_SIZE (1024*1024)
      
      if (NULL == logfile_) {
        FileDate();
        logfile_ = fopen(logfileName_.c_str(), "w");
      }
      else if (Size() > MAX_LOG_FILE_SIZE)
      {
        Close();
        FileDate();
        logfile_ = fopen(logfileName_.c_str(), "w");
      }
    }
  
    inline void Close(void)
    {
      if(logfile_) {
        fclose(logfile_);
        logfile_ = NULL;
      }
    }

    virtual void OnLogMessage(const std::string& message) {
      rtc::CritScope lock(&log_crit_);
      Start();
      
      if (NULL == logfile_)
        return;

      QString timeString = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz");
      string msgString;
      msgString = timeString.toStdString() + message;
      if(fwrite(msgString.c_str(), 1, msgString.length(), logfile_) < 0) {
        Close();
      } else if(fflush(logfile_) < 0) {
        Close();
      }
    }
  
  private:
    
    FILE* logfile_;
    const std::string log_path_;
    std::string logfileName_;


    rtc::CriticalSection log_crit_;
  };

 

二、调用类

        rtc::LoggingSeverity min_sev = rtc::LS_ERROR;
        switch (webrtc_log_level)
        {
            case 1 :
                min_sev = rtc::LS_ERROR;
                break;
            case 2 :
                min_sev = rtc::LS_WARNING;
                break;
            case 3 :
                min_sev = rtc::LS_INFO;
                break;
        }
        FileLog* _LogStream = new FileLog("logs");
        rtc::LogMessage::AddLogToStream(_LogStream, min_sev); 

猜你喜欢

转载自blog.csdn.net/CrystalShaw/article/details/97137693