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写入磁盘 异步