《Linux C++项目必备》glog日志管理

2023-11-04

一、简介

Google Glog 是一个C++语言的应用级日志记录框架,提供了 C++ 风格的流操作和各种助手宏。

二、下载

git clone https://github.com/google/glog.git
cd glog
./autogen.sh
./configure  --prefix=path(install)
make
make install

三、glog用法

1、级别

enum SeverityLevel
{
    INFO,
    WARNING,
    ERROR,
    FATAL
};

2、日志输出:

LOG(INFO) <<"info test";//输出一个Info日志
LOG(WARNING) <<"warning test";//输出一个Warning日
LOG(ERROR) <<"error test";//输出一个Error日志
LOG(FATAL) <<"fatal test";//输出一个Fatal日志,这是最严重的日志并且输出之后会中止程序

3、条件输出

LOG_IF(INFO, num_cookies >10) <<"Got lots of cookies";//当条件满足时输出日志
LOG_EVERY_N(INFO,10) <<"Got the "<< google::COUNTER <<"th cookie";//google::COUNTER 记录该语句被执行次数,从1开始,在第一次运行输出日志之后,每隔 10 次再输出一次日志信息
LOG_IF_EVERY_N(INFO, (size >1024),10) <<"Got the "<< google::COUNTER <<"th big cookie";//上述两者的结合,不过要注意,是先每隔 10 次去判断条件是否满足,如果滞则输出日志;而不是当满足某条件的情况下,每隔 10 次输出一次日志信息。
LOG_FIRST_N(INFO,20) <<"Got the "<< google::COUNTER <<"th cookie";//当此语句执行的前 20 次都输出日志,然后不再输出

4、常用函数

google::SetLogDestination(google::GLOG_INFO,"log/prefix_");//设置特定严重级别的日志的输出目录和前缀。第一个参数为日志级别,第二个参数表示输出目录及日志文件名前缀。
google::SetLogFilenameExtension("logExtension");//在日志文件名中级别后添加一个扩展名。适用于所有严重级别。
google::SetStderrLogging(google::GLOG_INFO);//大于指定级别的日志都输出到标准输出

5、常用参数设置

FLAGS_logtostderr =true;//设置日志消息是否转到标准输出而不是日志文件
FLAGS_alsologtostderr =true;//设置日志消息除了日志文件之外是否去标准输出
FLAGS_colorlogtostderr =true;//设置记录到标准输出的颜色消息(如果终端支持)
FLAGS_log_prefix =true;//设置日志前缀是否应该添加到每行输出
FLAGS_logbufsecs =0;//设置可以缓冲日志的最大秒数,0指实时输出
FLAGS_max_log_size =10;//设置最大日志文件大小(以MB为单位)
FLAGS_stop_logging_if_full_disk =true;//设置是否在磁盘已满时避免日志记录到磁盘

三、例子

main.cpp

#include "gloghelper.h"
using namespace std;

int main()
{
    GLogHelper loghelper;
    loghelper.InitLogger();
    LOG(ERROR)<<"log test";

    return 0;

}


 gloghelper.cpp

#include "gloghelper.h"


void CoreDumped(const char *data, int size)
{
    std::string str = std::string(data,size);
    LOG(ERROR)<<str;
}


GLogHelper::GLogHelper()
{

}

GLogHelper::~GLogHelper()
{
    google::ShutdownGoogleLogging();
}

/**
 * @brief:
 * @param: const char *program --程序名称
 * @param: uint32_t log_level  --需要输出到日志等级包括:(INFO、WARNING、ERROR)
 * @param: const char *log_dir --存放日志到目录
 * @return: void
 * @date:   
 * @autor:  
 */
void GLogHelper::InitLogger(const char *program, const uint32_t log_level, const char* log_dir)
{
    if(access(log_dir,F_OK))
    {
        mkdir(log_dir,S_IRWXU | S_IRWXG | S_IXOTH);
    }
    //初始化应用进程名
    google::InitGoogleLogging(program);

    char info_path[100];
    char warning_path[100];
    char error_path[100];

    snprintf(info_path,sizeof(info_path),"%s%s",log_dir,"/INFO_");
    snprintf(warning_path,sizeof(warning_path),"%s%s",log_dir,"/WARNING_");
    snprintf(error_path,sizeof(error_path),"%s%s",log_dir,"/ERROR_");

    //取消默认链接文件(链接文件为最新到日志输出)
    google::SetLogSymlink(google::GLOG_INFO,"");
    google::SetLogSymlink(google::GLOG_WARNING,"");
    //google::SetLogSymlink(google::GLOG_ERROR,"");
    //google::SetLogSymlink(google::GLOG_FATAL,"");
    
    //将段错误详细信息输出到日志文件
    google::InstallFailureSignalHandler();
    google::InstallFailureWriter(CoreDumped);

    //是否将日志输出到标准错误而不是日志文件
    FLAGS_logtostderr = false;
    //是否同时将日志发送到标准错误和日志文件中
    FLAGS_alsologtostderr = false;
    //当日志级别大于此级别时,自动将此日志输出到标准错误中
    FLAGS_stderrthreshold = google::WARNING;
    //当日志级别大于此级别时会马上输出,而不缓存
    FLAGS_logbuflevel = google::ERROR;
    //实时刷新日志到硬盘,默认是会缓存
    FLAGS_logbufsecs = 0;
    //日志大小大于30M时,创建新到日志
    FLAGS_max_log_size = 30;
    //当磁盘满时,停止输出日志文件
    FLAGS_stop_logging_if_full_disk = true;

    //如果未指定日志输出等级,glog不会输出日志
    //设置错误级别大于等于多少时输出到文件
    //参数2为日志存放到目录和日志文件前缀
    if(log_level == google::GLOG_INFO)
    {

        google::SetLogDestination(google::INFO,info_path);
    }
    else if(log_level == google::GLOG_WARNING)
    {
        google::SetLogDestination(google::GLOG_WARNING,warning_path);
    }
    else if(log_level == google::GLOG_ERROR)
    {
        google::SetLogDestination(google::ERROR,error_path);
    }
    else
    {
        google::ShutdownGoogleLogging();
    }
}

 gloghelper.h

#ifndef GLOGHELPER_H
#define GLOGHELPER_H
#include<glog/logging.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<stdio.h>
#include<stdlib.h>
#include <iostream>
#include <string>
#include <sstream>
#include <cstdlib>
#include <time.h>

enum SeverityLevel
{
    INFO,
    WARNING,
    ERROR,
    FATAL
};

class GLogHelper
{
public:
    GLogHelper();
    ~GLogHelper();

    /**
     * @brief:
     * @param: const char *program --程序名称
     * @param: uint32_t log_level  --需要输出到日志等级包括:(INFO、WARNING、ERROR)
     * @param: const char *log_dir --存放日志到目录
     * @return: void
     * @date:  
     * @autor:  
     */
    void InitLogger(const char* program="ARHUD", const uint32_t log_level = google::ERROR, const char* log_dir="log");



private:


};


#endif // GLOGHELPER_H

makefile

CXX = g++ #编译工具
SOURCES = *.cpp #资源文件
OBJECTS = $(SOURCES:.cpp=.o)#目标文件 
TARGET = app #可执行文件 
LIBS += -lglog -lpthread #glog库
$(TARGET):$(OBJECTS)  
	$(CXX) -o $(TARGET) $(OBJECTS) $(LIBS) 
$(OBJECTS):$(SOURCES)  
	$(CXX) -c $(SOURCES) $(INCLUDE) 
 
# 编译规则 $@代表目标文件 $< 代表第一个依赖文件  
%.o:%.cpp  
	$(CXX) -o $@ -c $<  
#清除编译过程中产生的文件
clean:  
	$(RM) $(OBJECTS) $(TARGET) 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《Linux C++项目必备》glog日志管理 的相关文章

随机推荐

  • linux搭建geth私有节点

    linux创建节点 下载文件并上传服务器解压 Downloads Go Ethereum tar zxvf geth linux amd64 1 10 11 7231b3ef tar gz mv geth linux amd64 1 10
  • 2022年智能机器人与系统国际研讨会(ISoIRS 2022)

    2022年智能机器人与系统国际研讨会 ISoIRS 2022 重要信息 会议网址 www isoirs org 会议时间 2022年10月14 16日 召开地点 中国成都 截稿时间 2022年8月30日 录用通知 投稿后2周内 出版社 IO
  • C/C++时间戳转换函数

    目录 生成时间戳 time函数 函数原型 获取当前时间戳 转换时间戳为北京时间
  • 基于springboot+vue前后端分离的小区物业管理系统

    小区物业管理系统 简介 这是一个 SpringBoot Vue 的前后端分离小区物业管理系统 前端使用了若依的后台管理模板 使用 ElementUI 作为 UI 组件 使用 Vue Router 来进行路由跳转 使用 Vuex 来存储状态信
  • WPF自定义控件CustomControl中依赖属性、命令的使用

    Generic xaml中的UI代码
  • Redis中key的操作命令

    文章目录 Redis中key的操作命令 1 keys 查找所有符合模式pattern的key 2 exists 判断key是否存在于数据库中 3 move 移动指定的key到指定的数据库实例 4 ttl 查看key的剩余生存时间 5 exp
  • CoreML 的 C++部署 [2] 模型类抽象

    接上一篇 CoreML 的 C 部署 1 模型转换和预处理 再解决了预处理的问题后 部署部署还剩下模型类的抽象 主要包括初始化 推理以及获取输出 模型类的抽象 什么是模型类 可以参考 CoreML模型分析 我们是以MobileNetV2 m
  • 【Cinemachine】VirtualCamera虚拟相机详解(一)

    摘要 VirtualCamera虚拟相机是Cinemachine系统中的核心组成部分 咱们一起来看看虚拟相机是怎么用的吧 你好 我是跟着大智学Unity的萌新 我叫小新 这是我本周的学习总结报告哦 虚拟相机 Cinemachine中的Vir
  • 《数据仓库与数据挖掘》期末复习总结

    数据仓库与数据挖掘 期末复习总结 适用教材 数据挖掘概念与技术 第3版 Jiawei Han Mieheline Kamber Jian Pei著 机械工业出版社 提示 与教材内容不完全匹配 有所取舍 写在前面 这份复习总结是笔者根据老师授
  • 数据库期末复习(SQLserver)

    数据库期末复习 填空 1 数据库技术经历了 人工处理 文件系统 数据库系统 三个阶段 2 SQL语言集 数据定义 数据查询 数据 操纵 数据控制 功能于一体 3 E R图的主要元素是 实体型 属性 联系 4 关系系统的完整性控制包括 实体完
  • scrapy DNS lookup failed: no results for hostname lookup

    版权声明 更多最新原创文章请访问 最新原创主页 更多最全原创文章请访问 更多原创主页 DNS lookup failed 问题 第一天还可以正常跑起来的代码 第二天就跑不起来了 scrapy 中 解决方法
  • C语言第二节 分支结构

    1 BOOL数据类型 BOOL数据类型是一种表示非真即假的数据类型 只有 YES和 NO两种情况 YES 1 代表真 NO 0 代表假 BOOL数据类型的变量可以用来接收表达式的返回值 只要返回非0 那么BOOL类型的变量的值就为YES B
  • hdu 1078 FatMouse and Cheese

    Problem acm hdu edu cn showproblem php pid 1078 题意 n n 个洞 每个洞都放有 0 100 个芝士块 老鼠从 0 0 出发 每次都能横着或竖着走最多 k 格 且要走到芝士块数比当前洞多的洞里
  • 支付宝拿技术开刀把扫码无情地革掉

    随着互联网和数据的积累 计算机算力的跃升和算法的优化 人工智能正在让生活变得更加便捷 二维码扫码支付横空出世没多久 我们刚刚习惯扔掉现金的后现代生活 支付宝却突然宣布刷脸支付将全面接管扫码支付 又一次 支付宝拿自己较得心应手的技术开刀 把自
  • AOP功能代码实例---Spring源码从入门到精通(十七)

    上篇文章主要介绍了 Profile注解 可以对不同的开发环境 test dev 选择性加载不同的组件 如果用AnnocationConfigApplicationContext 需要用无参构造函数 先自己getEnviroment 设置指定
  • Unity_Raycasters

    Raycasters The Event System needs a method for detecting where current input events need to be sent to and this is provi
  • Atlantis 【POJ - 1151】【扫描线模板讲解】

    题目链接 是第二次写这道题了 但是也加深了我对扫描线的印象了 具体什么是扫描线 我们就如是讲讲吧 扫描线就是为了方便处理有重的区间面积的方式 我们通过线段树的方式去优化它 可以做到更少的时间复杂度 对于一个二维平面 我们用一个平行于Y轴的线
  • conda遇到的问题

    在使用conda安装python时 使用conda install python 3 6 0出现以下错误 Solving environment failed CondaHTTPError HTTP 000 CONNECTION FAILE
  • cpp基础:对象和类

    1 类名首字母大写 Wakawaka 2 类接口 编写类的人提供的一个操作类成员的方法 3 通过关键字实现类成员的访问控制 4 封装 将实现细节和抽象分开被称为封装 如 h和 cpp文件分开 接口是实现封装的重要一环 5 默认访问权限pri
  • 《Linux C++项目必备》glog日志管理

    一 简介 Google Glog 是一个C 语言的应用级日志记录框架 提供了 C 风格的流操作和各种助手宏 二 下载 git clone https github com google glog git cd glog autogen sh