webrtc native log 写入文件
2017-10-16 本文已影响74人
Gobert
WebRTC Native 代码的 log 默认是不会输出到控制台和文件中,但是 webrtc 提供了相应的接口,以方便我们将日志输出到控制台或者磁盘文件中,日志做为一个通用的基础功能,它的实现被放在了 rtc_base 下的 logging 文件中 ,首先需引用其头文件:
#include "webrtc/rtc_base/logging.h"
如果想要将日志同时输出到 Visual Studio IDE 的输出窗口中的话,只需要在程序入口处调用如下方法既可:
rtc::LogMessage::LogToDebug(rtc::INFO); //日志等级可自由配置
如果要将将 native log 输出到控制台以及文件中的话,步骤如下:
1、实现接收日志流的接口
首先需实现用于接收日志数据的接口 LogSink,并在其日志回调接口
virtual void OnLogMessage(const std::string& message) == 0;
中,将日志数据写入本地文件既可,最简单的实现类如下:
class MyLogStream : public rtc::LogSink {
public:
MyLogStream() {
if (0 != fopen_s(&_fp, "webrtc-native.log", "wt")) {
return;
}
}
virtual ~MyLogStream() {
if (_fp) {
fclose(_fp);
_fp = NULL;
}
}
//日志格式可在此接口中定义
virtual void OnLogMessage(const std::string& message) {
if (!_fp) {
return;
}
fwrite(message.c_str(), 1, message.length(), _fp);
//fflush(_fp);
}
private:
FILE* _fp = NULL;
};
2、配置日志等级
实现此接口后,申请一个该子类的新实例,并保证其全局的生存期,并为其添加需要记录的日志等级,如:
MyLogStream* _myLogStream = new MyLogStream;
//添加需要记录的日志最高等级,小于此值的均将被记录到日志中:
rtc::LogMessage::AddLogToStream(_myLogStream, rtc::INFO);
日志等级设置了 INFO,那么所有大于 INFO 的 log 都将写入文件;
3、写日志
通过以下接口记录日志:
LOG(INFO)
<< "WebRTC info log test.";
LOG(WARNING)
<< "WebRTC warning log test.";
LOG(LERROR)
<< "WebRTC error log test.";
以上三条日志便记录在日志文件中。