前言
看到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版测试工程下载点
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