glog使用

glog 是一款C/C++的 log 模塊,也是我找到的能直接在AIX上用xlc編譯的 LOG 模塊。 cookie

glog中爲每個log級別都會生成一個文件,低級別log文件中會包含其餘高級別的log,例如XXX.INFO 文件中會包含INFO,WARNING,ERROR,FATAL的log,可是XXX.ERROR中不會包含INFO和WARNING的log。咱們也能夠設定wrapper來改變寫log的行爲,例如我想把INFO log 作特殊處理,發送給另一個進程,能夠這樣寫: app

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寫入磁盤 異步

相關文章
相關標籤/搜索