glog的基本用法

前言

看到chromium中使用glog写日志。
单独看看glog的用法.
glog发布版本 : https://github.com/google/glog/releases
glog开发版的linux工程文件中都有win版的回车,直接编译都不过。需要下载稳定版本. e.g. google-glog 0.3.5

win版的编译要编译出各种lib(MBCS, Unicode, Debug, Release, x86, x64, MD, Mdd, MT, MTd)给自己的win版测试程序用,编译出来后,和测试工程联合编译,各种报错,可能是glog库工程配置不对,稍后再弄。

linux版编译在debian7上一次编译测试通过。

实验

linux版glog

编译glog

./configure --prefix=/home/my_glog-0.3.5
make
make install

glog库包含

编译出来后,.a和.so都在一起,用-lglog连接时,链到动态库去了。新建一个文件夹so, 将so都挪过去,只剩静态库就好。再编译,程序连接的就是静态库版的glog.

linux版测试工程下载点

src_test_glog_on_linux.7z

linux版测试工程预览

// @file main.cpp

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h> // daemon
#include <signal.h>

#include "glog/logging.h"
#include "glog/raw_logging.h"

#ifndef SAFE_DELETE
#define SAFE_DELETE(p) \
    if (NULL != (p)) { \
        delete (p); \
        (p) = NULL; \
    }
#endif // #ifndef SAFE_DELETE

#define LINE80 "--------------------------------------------------------------------------------"

#if not defined(MYLOG_D)
#define MYLOG_D printf
#endif

void init(const char* psz_log_owner_name);
void uninit();
void proc_sig_term(int num);
int fn_test();

int main(int argc, char** argv)
{
    char sz_buf[1024] = {'\0'};

#ifdef MAKE_FILE_MACRO__BIN_NAME
    sprintf(sz_buf, "%s", MAKE_FILE_MACRO__BIN_NAME);
    init(sz_buf);
    MYLOG_D("MAKE_FILE_MACRO__BIN_NAME = [%s]\n", MAKE_FILE_MACRO__BIN_NAME);
#else
    init(NULL);
#endif // #ifdef MAKE_FILE_MACRO__BIN_NAME

    fn_test();
    uninit();

    MYLOG_D("THE END\n");
    return EXIT_SUCCESS;
}

int fn_test()
{
    MYLOG_D(">> fn_test()\n");

    // glog初始化
    google::InitGoogleLogging("glog_init");

    // 指定日志位置
    MYLOG_D("log file = /var/log/test_glog.x");
    google::SetLogDestination(google::GLOG_INFO, "/var/log/"); // 记录日志级别 > google::GLOG_INFO 级别的日志

    // 指定日志的前缀名称
    google::SetLogFilenameExtension("test_glog.");

    // 日志的后缀名称为 20180906-163640.17120, 是时间戳字符串
    // LogFileObject::Write 处拼装的日志名称(如果日志文件还没建立)

    LOG(INFO) << "info : 1. This should work";
    LOG(WARNING) << "warning : 2. This should work";
    LOG(ERROR) << "error : 3. This should work"; // 这个在日志文件和屏幕, 各打印了一份
    // LOG(GLOG_FATAL) << "This should work"; // 不要调用这个错误级别, 程序退出了

    DLOG(INFO) << "info : 4. This should work";
    DLOG(WARNING) << "warning : 5. This should work";
    DLOG(ERROR) << "error : 6. This should work"; // 这个在日志文件和屏幕, 各打印了一份

    LOG_IF(INFO, (4 > 2)) << "7. info : 4 > 2";
    LOG_IF(WARNING, (4 < 2)) << "8. warning : 4 < 2";
    LOG_IF(ERROR, (4 < 2)) << "9. error : 4 < 2";
    // LOG_IF(FATAL, (4 < 2)) << "This should work"; // 不要调用这个错误级别, 程序退出了

    // RAW_LOG(INFO, "log info");

    // close glog
    google::ShutdownGoogleLogging();

    return 0;
}

/** run result
*/

void init(const char* psz_log_owner_name)
{
    int i = 0;

    // daemon(0, 0);

    // clear screen (print 25 empty line)
    for (i = 0; i < 25; i++) {
        MYLOG_D("\n");
    }

    signal(SIGTERM, proc_sig_term);
}

void uninit()
{
}

void proc_sig_term(int num)
{
    MYLOG_D("SIGTERM = %d, num = %d\n", SIGTERM, num);
    MYLOG_D("maybe can do some clean task before quit\n");
    exit(1);    
}

#!/bin/bash
# ==============================================================================
# @file build_all_project.sh
# ==============================================================================

make BIN_NAME="test_glog" rebuild

# ==============================================================================
# @file makefile
# ==============================================================================
# @note 
# howto build project
#       make BIN_NAME="bin_name_by_you_want" rebuild

MY_MAKE_FILE_PATH_NAME = $(MAKEFILE_LIST)

# macro from Makefile command line
# BIN_NAME

# macro to C project
MAKE_FILE_MACRO__BIN_NAME="make_file_macro__bin_name"

# var define on Makefile
BIN = output_not_give_bin_name
IS_BUILD_TYPE_VALID = 0

ifdef BIN_NAME
    IS_BUILD_TYPE_VALID = 1
    BIN = $(BIN_NAME)
    MAKE_FILE_MACRO__BIN_NAME=$(BIN_NAME)
else
    IS_BUILD_TYPE_VALID = 0
endif

LINE80 = --------------------------------------------------------------------------------

# CC = g++ -std=c++98
CC = g++

# -Werror is "warning as error"
CFLAGS = -Wall -Werror -g

INC = -I. -I./glog-0.3.5-build-ok-on-debian7/include/
LIBPATH = -L./glog-0.3.5-build-ok-on-debian7/lib -L/usr/lib/ -L/usr/local/lib/

ifeq (1, $(IS_BUILD_TYPE_VALID))
    LIBS = -lstdc++ -pthread -lglog
else
    LIBS =
endif

DEPEND_CODE_DIR = ./empty_dir \

DEPEND_CODE_SRC = $(shell find $(DEPEND_CODE_DIR) -name '*.cpp')
DEPEND_CODE_OBJ = $(DEPEND_CODE_SRC:.cpp=.o)

ROOT_CODE_SRC = $(shell find ./ -name '*.cpp')
ROOT_CODE_OBJ = $(ROOT_CODE_SRC:.cpp=.o)

SUB_CODE_DIR = ./empty_dir
SUB_CODE_SRC = $(shell find $(SUB_CODE_DIR) -name '*.cpp')
SUB_CODE_OBJ = $(SUB_CODE_SRC:.cpp=.o)

.PHONY: help
help:
    clear
    @echo "usage:"
    @echo
    @echo "build project by given bin name"
    @echo "make BIN_NAME=\"bin_name_by_you_want\" rebuild"
    @echo

.PHONY: clean
clean:
    clear

    @echo
    @echo
    @echo
    @echo
    @echo
    @echo
    @echo
    @echo
    @echo
    @echo

    @echo
    @echo
    @echo
    @echo
    @echo
    @echo
    @echo
    @echo
    @echo
    @echo

    @echo
    @echo
    @echo
    @echo
    @echo

    @echo "make clean begin"
    @echo $(LINE80)

    @echo "@file $(MY_MAKE_FILE_PATH_NAME)"
    @echo "IS_BUILD_TYPE_VALID = $(IS_BUILD_TYPE_VALID)"
    @echo "BIN = $(BIN)"

    @echo $(LINE80)

    rm -f $(ROOT_CODE_OBJ) $(DEPEND_CODE_OBJ) $(SUB_CODE_OBJ)

ifeq (1, $(IS_BUILD_TYPE_VALID))
    rm -f ./$(BIN)
endif

    @echo "make clean over"

.PHONY: all
all:$(BIN)
    @echo $(LINE80)
    @echo make all
    chmod 777 ./$(BIN)
    find . -name "$(BIN)"

$(BIN) : $(ROOT_CODE_OBJ) $(DEPEND_CODE_OBJ) $(SUB_CODE_OBJ)
    $(CC) $(CFLAGS) -o $@ $^ $(SHLIBS) $(INC) $(LIBPATH) $(LIBS)

.cpp.o:
    $(CC) -c $(CFLAGS) -DMAKE_FILE_MACRO__BIN_NAME="\"$(MAKE_FILE_MACRO__BIN_NAME)\"" $^ -o $@ $(INC) $(LIBPATH) $(LIBS)

.PHONY: rebuild
rebuild:
    make -f $(MY_MAKE_FILE_PATH_NAME) clean

ifeq (1, $(IS_BUILD_TYPE_VALID))
    @echo $(LINE80)
    make -f $(MY_MAKE_FILE_PATH_NAME) all
    chmod 775 ./$(BIN)
    ldd ./$(BIN)
else
    @echo $(LINE80)
    @echo "error : Makefile command line input error, please see help"  
    @echo "please run => make help" 
    @echo $(LINE80)
endif


猜你喜欢

转载自blog.csdn.net/LostSpeed/article/details/82493606