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