一、glog介绍
glog 是 Google 开发的一种轻量级C++日志库,使用方法十分简洁、用在程序中也十分的轻巧。
主要支持以下功能:
1 参数设置,通过设置标志参数来控制日志记录行为;
2 严重性分级,根据日志严重性分级记录日志;
3 可有条件地记录日志信息;
4 条件中止程序,丰富的条件判定宏,可预设程序终止条件;
5 异常信号处理。程序异常情况,可自定义异常处理过程;
6 支持debug功能,可只用于debug模式;
7 自定义日志信息;
8 线程安全日志记录方式;
9系统级日志记录;
10 google perror风格日志信息;
11 精简日志字符串信息。

下面记录一下在工作的项目中是如何使用glog的。

二、编译glog
首先下载glog文件:glog-0.3.3.tar.gz,将其解压 tar -zxvf glog-0.3.3.tar.gz。进入其目录执行如下命令:

$ ./configure --host=arm-arago-linux-gnueabi

这里的–host=arm-arago-linux-gnueabi指明开发的平台,如果不是在对应的ARM上运行,直接运行”./configure”即可。
生成makefile,载执行make命令。会在glog当前目录的.lib下就会有.so的动态库libglog.so.0 。将其拷贝到目标机的/usr/lib目录下。
注意:编译库和运行库是不一样的,运行库是在/usr/lib,当编译运用到glog的程序时还需要在编译库里面加入libglog.so.0。在这里的编译库的路径是:/ti-sdk-am335x/linux-devkit/arm-arago-linux-gnueabi/usr/lib。否则在编译的时候要链接此库但是无法找到这个库时是不能通过编译的。
在makefile中需要加入对glog的链接关键字:-lglog.

@$$GG -fstack-check -fbounds-check -fstack-protector-all -g -o $(application_name) $(TOPOBJS) -lm -lpthread -lxml2 -lrt -lglog

三、实际运用
上述步骤完成后才能够在程序中使用。
来看看对glog的一些初始化操作。

void int_glog(void)
{
char defpath[100] = {0};
char str[256] = "mkdir ";
//获取当前路径
int cnt = readlink("/proc/self/exe", defpath, sizeof(defpath));
//delete the exe name
for(int i = cnt; i >= 0; --i)
{
if(defpath[i] == '/')
{
defpath[i+1] = '\0';
break;
}
}
//创建log文件夹
strcat(defpath, "usr/log");
if(access(defpath, FILE_F_OK) != 0)
{
strcat(str,defpath);
system(str);
usleep(100000);
}

//log初始化
google::InitGoogleLogging("New");

FLAGS_colorlogtostderr = true;//设置输出到屏幕的日志显示相应颜色
//FLAGS_servitysinglelog = true;// 用来按照等级区分log文件
FLAGS_logbufsecs = 0;//缓冲日志输出,默认为30秒,此处改为立即输出
FLAGS_max_log_size = 1; //最大日志大小为 100MB
FLAGS_stop_logging_if_full_disk = true;//当磁盘被写满时,停止日志输出
google::SetStderrLogging(google::GLOG_INFO); //设置级别 高于 google::INFO 的日志同时输出到屏幕

//日志名称和输出地址
char Info[50] = {0};
char Warn[50] = {0};
char Error[50] = {0};
char Fatal[50] = {0};

strcpy(Info, defpath);
strcpy(Warn, defpath);
strcpy(Error, defpath);
strcpy(Fatal, defpath);

strcat(Info, "/Info_");
strcat(Warn, "/Warning_");
strcat(Error, "/Error_");
strcat(Fatal, "/Fatal_");
google::SetLogDestination(google::GLOG_INFO,Info);
google::SetLogDestination(google::GLOG_WARNING,Warn);
google::SetLogDestination(google::GLOG_ERROR,Error);
google::SetLogDestination(google::GLOG_FATAL,Fatal);
LOG(INFO) <<"------------------------------"<<endl;
LOG(INFO) <<"---------Creat Log!!!---------\n ";
LOG(INFO) <<"------------------------------"<<endl;
}

在初始化代码中调用了库函数,需要把glog-0.3.3\src\glog中的头文件加入到代码工程文件中,否则找不到函数定义。
本示例中运行程序后就会在所在运行程序所在文件夹下的usr/log文件中生成日志文件。日志按照不同的级别进行了分类。

更多相关文章

  1. 获取Android应用程序的Linux UID
  2. 设置查看linux 造成程序Core dumped 的函数调用层次
  3. iptables:传统的Linux防火墙管理程序
  4. linux socket 程序被ctrl+c或者异常终止,再次起程序时提示该端口
  5. Linux实用程序编写了一个matlab .mat文件
  6. 修复linux grub引导程序
  7. Linux程序设计——文件操作(标准I/O库)
  8. 在Linux中的脚本中安装应用程序
  9. 如何发送一个字节(或字节)来测试在我的应用程序中监听的套接字?

随机推荐

  1. onRetainNonConfigurationInstance和getL
  2. Android内核的编译与裁剪
  3. Google 推出「Android(安卓)Beam」基於 N
  4. Android内建样式收集
  5. android一键分享功能不使用任何第三方sdk
  6. android实践--进度对话框(ProgressDialog
  7. android 解析服务端下发的颜色值
  8. Android Notification的使用
  9. Android File Hierarchy : System Struct
  10. [日更-2019.5.21] Android(安卓)系统的分