arm-linux系统下加入glog日志

时间:2022-03-30 22:28:38

一、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文件中生成日志文件。日志按照不同的级别进行了分类。