glog使用

glog 是一款C/C++的 log 模块,也是我找到的能直接在AIX上用xlc编译的 LOG 模块。

glog中为每一个log级别都会生成一个文件,低级别log文件中会包含其他高级别的log,例如XXX.INFO 文件中会包含INFO,WARNING,ERROR,FATAL的log,但是XXX.ERROR中不会包含INFO和WARNING的log。我们也可以设定wrapper来改变写log的行为,例如我想把INFO log 做特殊处理,发送给另外一个进程,可以这样写:

using namespace google;

struct MyLogger : public base::Logger {


  virtual void Write(bool /* should_flush */,
                     time_t /* timestamp */,
                     const char* message,
                     int length) {
          //  write your log message to where ever you want
          //  suggest to put the log into your local buffer
  }

  virtual void Flush() { 
          // flush the local buffer
  }

  virtual uint32 LogSize() {
          return 0; // return the current size of local buffer
  }
};



int main(int argc, char* argv[]) {
        
        google::SetStderrLogging(google::FATAL);
        google::InitGoogleLogging(argv[0]);

        MyLogger my_logger;
        base::SetLogger(GLOG_INFO, &my_logger);
        

        LOG(INFO) << "Found info cookies";       //0
        LOG(WARNING) << "Found WARNING cookies"; //1
        LOG(ERROR) << "Found error cookies";     //2
        
}

上面的代码运行后不会产生APP.INFO这个文件,因为我们將INFO的Logger替换成了MyLogger,可以在MyLogger中实现向另外一个进程发送异步消息,使得程序不必等待log写入磁盘



你可能感兴趣的:(C++,c,log,AIX,glog)