简介:
出自互联网豪门谷歌,轻量级,入门简单,功能较全,线程安全,支持自定义。
安装:
获取源码:git clone @github.com/google/glog
源码安装:
cd glog
./autogen.sh && ./configure && make && make install
默认安装路径:/usr/local/
使用:
初始化:
google::InitGoogleLogging(argv[0]);
关闭:
google::ShutdownGoogleLogging();
设置目录:
FLAGS_log_dir ="/var/log/xxx_log/";
级别:
enumSeverityLevel
{
google::INFO =0,
google::WARNING =1,
google::ERROR =2,
google::FATAL =3,
};
日志输出:
LOG(INFO) <<"info test";//输出一个Info日志
LOG(WARNING) <<"warning test";//输出一个Warning日志
LOG(ERROR) <<"error test";//输出一个Error日志
LOG(FATAL) <<"fatal test";//输出一个Fatal日志,这是最严重的日志并且输出之后会中止程序
条件输出:
LOG_IF(INFO, num_cookies >10) <<"Got lots of cookies";//当条件满足时输出日志
LOG_EVERY_N(INFO,10) <<"Got the "<< google::COUNTER <<"th cookie";//google::COUNTER 记录该语句被执行次数,从1开始,在第一次运行输出日志之后,每隔 10 次再输出一次日志信息
LOG_IF_EVERY_N(INFO, (size >1024),10) <<"Got the "<< google::COUNTER <<"th big cookie";//上述两者的结合,不过要注意,是先每隔 10 次去判断条件是否满足,如果滞则输出日志;而不是当满足某条件的情况下,每隔 10 次输出一次日志信息。
LOG_FIRST_N(INFO,20) <<"Got the "<< google::COUNTER <<"th cookie";//当此语句执行的前 20 次都输出日志,然后不再输出
常用函数:
google::SetLogDestination(google::GLOG_INFO,"log/prefix_");//设置特定严重级别的日志的输出目录和前缀。第一个参数为日志级别,第二个参数表示输出目录及日志文件名前缀。
google::SetLogFilenameExtension("logExtension");//在日志文件名中级别后添加一个扩展名。适用于所有严重级别。
google::SetStderrLogging(google::GLOG_INFO);//大于指定级别的日志都输出到标准输出
常用参数设置:
FLAGS_logtostderr =true;//设置日志消息是否转到标准输出而不是日志文件
FLAGS_alsologtostderr =true;//设置日志消息除了日志文件之外是否去标准输出
FLAGS_colorlogtostderr =true;//设置记录到标准输出的颜色消息(如果终端支持)
FLAGS_log_prefix =true;//设置日志前缀是否应该添加到每行输出
FLAGS_logbufsecs =0;//设置可以缓冲日志的最大秒数,0指实时输出
FLAGS_max_log_size =10;//设置最大日志文件大小(以MB为单位)
FLAGS_stop_logging_if_full_disk =true;//设置是否在磁盘已满时避免日志记录到磁盘
简单demo:
int main(int argc,char* argv[])
{
google::InitGoogleLogging(argv[0]);
FLAGS_logtostderr = false; //设置日志消息是否转到标准输出而不是日志文件
FLAGS_alsologtostderr = false; //设置日志消息除了日志文件之外是否去标准输出
FLAGS_log_prefix = true; //设置日志前缀是否应该添加到每行输出
FLAGS_log_dir = "./log"; //预创建好
//google::SetStderrLogging(google::GLOG_FATAL);
for(int i = 0 ; i < 100 ; i++)
{
LOG(INFO) << "Hello,info! ";
LOG(ERROR) << "Hello erroe! " <<i;
LOG(WARNING) << "Hello,waring! "<<i<<"+"<<i<<"="<<i+i;
//LOG(FATAL) << "Hello,fatal! ";
}
google::ShutdownGoogleLogging();
return 0;
}
编译:g++ demo.cpp -o demo /usr/local/lib/libglog.a -lpthread
运行 ./demo log目录下产生日志文件
扩展
WARNING,ERROR的日志会被同时输出到INFO中,设置不让其输出 修改logging.cc
inline void LogDestination::LogToAllLogfiles(LogSeverity severity,
time_t timestamp,
const char* message,
size_t len) {
if ( FLAGS_logtostderr ) { // global flag: never log to file
ColoredWriteToStderr(severity, message, len);
} else {
//for (int i = severity; i >= 0; --i) 注释掉即可
LogDestination::MaybeLogToLogfile(severity, timestamp, message, len); // i 替换 severity
}
}
网友评论