arm-linux系統下加入glog日誌

一、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文件中生成日誌文件。日誌按照不同的級別進行了分類。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章