【日志工具】g3log_6_ROS1中g3log的安装&使用

2023-11-15

ROS1中g3log的安装&使用

基于ros1-melodic版本进行封装使用

g3log库安装

git clone https://github.com/KjellKod/g3log.git
cd g3log
git checkout c++11-master
mkdir build
cd build
cmake ..
make
sudo make install

在这里插入图片描述

g3sinks库安装

ros环境下的boost库安装目录与g3sinks要求的不一致,所以先修改下 ./g3sinks/sink_lograte/CMakeLists.txttarget_link_libraries修改为如下

target_link_libraries(
  g3logrotate
  PUBLIC  ${G3LOG_LIBRARY}
  /usr/lib/x86_64-linux-gnu/libboost_filesystem.so
  /usr/lib/x86_64-linux-gnu/libboost_system.so
  # ${Boost_LIBRARIES}
  #PRIVATE Boost::filesystem
  #PRIVATE Boost::system
  PRIVATE ${ZLIB_LIBRARY}
  )
git clone https://github.com/KjellKod/g3sinks.git
cd g3sinks
git checkout c++11-master
mkdir build
cd build
cmake ..
make
sudo make install

在这里插入图片描述

g3log封装

g3log_helper.h

#pragma once
#include <iostream>
#include <stdlib.h>
#include <memory>

#include <g3sinks/LogRotate.h>
#include <g3log/g3log.hpp>
#include <g3log/logworker.hpp>

struct CustomSink {
  // Linux xterm color
  // http://stackoverflow.com/questions/2616906/how-do-i-output-coloured-text-to-a-linux-terminal
  enum FG_Color { YELLOW = 33, RED = 31, GREEN = 32, WHITE = 97 };

  FG_Color GetColor(const LEVELS level) const {
    if (level.value == WARNING.value) {
      return YELLOW;
    }
    if (level.value == DEBUG.value) {
      return GREEN;
    }
    if (g3::internal::wasFatal(level)) {
      return RED;
    }
    return WHITE;
  }

  void ReceiveLogMessage(g3::LogMessageMover logEntry) {
    auto level = logEntry.get()._level;
    auto color = GetColor(level);

    std::cout << "\033[" << color << "m" << logEntry.get().toString()
              << "\033[m" << std::endl;
  }
};

class G3log_Helper {
public:
  // G3Log配置:
  G3log_Helper(bool debug, std::string program);

  // G3Log内存清理:
  ~G3log_Helper();

private:
  bool debug_;
  std::unique_ptr<g3::LogWorker> worker;
};

g3log_helper.cpp

#include "g3log_helper.h"

// G3Log配置:
G3log_Helper::G3log_Helper(bool debug, std::string program) : debug_(debug) {
  // 配置日志目录
  std::string home = getenv("HOME");
  std::string dir_log = home + "/g3log";
  std::string mkdir_log = "mkdir -p " + dir_log;
  system(mkdir_log.c_str());

  worker = g3::LogWorker::createLogWorker();
  // 取消默认日志目录配置
  // auto handle = worker->addDefaultLogger(program, LOGDIR); 
  // 日志是否输出到终端
  if (debug_) {
    auto sinkHandle = worker->addSink(std2::make_unique<CustomSink>(),
                                      &CustomSink::ReceiveLogMessage);
  }
  // 自定义日志目录
  auto logHandle = worker->addSink(
      std::make_unique<LogRotate>(program, dir_log), &LogRotate::save);
  // 自定义日志大小
  const int k10MBInBytes = 10 * 1024 * 1024; // 10M
  std::future<void> received =
      logHandle->call(&LogRotate::setMaxLogSize, k10MBInBytes);

  g3::initializeLogging(worker.get());
}

// G3Log内存清理:
G3log_Helper::~G3log_Helper() { 
  g3::internal::shutDownLogging(); 
}

g3log语法

// 类初始化
G3log_Helper gh(true, "test_log");

// 正常流式输出
LOG(DEBUG) << "Hi " << "DEBUG";
LOG(INFO) << "Hi " << "INFO";
LOG(WARNING) << "Hi " << "WARNING";
// printf式输出
LOGF(INFO, "Hi log %d", 123);
LOGF(WARNING, "Printf-style syntax is also %s", "available");

// 条件输出
int less = 1;
int more = 2;
LOG_IF(INFO, (less < more)) << "If [true], then this text will be logged";

// or with printf-like syntax
LOGF_IF(INFO, (less < more), "if %d<%d then this text will be logged", less, more);

//*CHECK(false)*会触发一个“fatal”的信息
CHECK(less != more); // not FATAL
// CHECK(less > more) << "CHECK(false) triggers a FATAL message";
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【日志工具】g3log_6_ROS1中g3log的安装&使用 的相关文章

随机推荐

  • windows下安装cygwin+swoole教程

    swoole下载 http git oschina net swoole swoole cygwin下载 https www cygwin com setup x86 64 exe cygwin镜像地址 http mirrors sohu
  • 如何拯救空间不足的C盘?

    目录 操作步骤 确定软件后期安装的位置 修改注册表 验证 心得 操作步骤 确定软件后期安装的位置 建议选择硬盘内存比较多的一个盘 我选择的是D盘 然后复制D programs 修改注册表 打开注册表编辑器 双击HKEY LOCAL MACH
  • JS操作dom,bom

    属性是 方法里面是可以写参数的 window open 打开窗口 p1 要打开的新窗口地址 p2 窗口名称 p3 窗口特征 open newwindow html width 400px height 400px close 关闭窗口 al
  • STM32外部高速晶振不起振的故障分析

    STM32外部高速晶振不起振的故障分析 一 故障背景 网上售卖的STM32F103C8T6的核心板如图1所示 由于STM32F103C8T6最小系统核心板的采购成本高达20元 块至40元 块 为了降低采购成本 对其STM32F103C8T6
  • oracle sqlldr详解,sqlldr详解

    Oracle 的SQL LOADER可以将外部数据加载到数据库表中 下面是SQL LOADER的基本特点 1 能装入不同数据类型文件及多个数据文件的数据 2 可装入固定格式 自由定界以及可度长格式的数据 3 可以装入二进制 压缩十进制数据
  • codeblocks安装及使用教程详解

    一 官网下载 搜索codeblocks官网 下载最新codeblocks安装包 codeblocks官网 https www codeblocks org downloads 二 安装 1 双击下载好的安装文件 弹出如下界面 点击 Next
  • matlab dct实现代码,基于DCT数字水印算法的Matlab实现源代码

    M 256 原图像长度 N 32 水印图像长度 K 8 I zeros M M II zeros K K B zeros M M Idct zeros K K D zeros M M 读取原图像 I imread 33 png subplo
  • 机器学习 —— 类不平衡问题与SMOTE过采样算法

    在前段时间做本科毕业设计的时候 遇到了各个类别的样本量分布不均的问题 某些类别的样本数量极多 而有些类别的样本数量极少 也就是所谓的类不平衡 class imbalance 问题 本篇简述了以下内容 什么是类不平衡问题 为什么类不平衡是不好
  • 删除git远程库中误传的文件

    不小心把node modules文件夹上传到远端了哇 别急 有办法 git rm r cached node modules 如果是在某个文件夹下面 也可以使用路径 xxx node modules 之后再执行push git commit
  • c语言灯塔案例求塔低数,C++:有一个8层灯塔,每层所点灯数都等于该层上一层的两倍,一共有765盏灯,求塔底的灯数...

    满意答案 0214zyt 2013 05 23 采纳率 51 等级 12 已帮助 6734人 Note Your choice is C IDE include include using namespace std int main 第一
  • Java多线程的同步问题

    在多线程的编程环境中 可能会有两个或者更多的线程试图同时访问一个有限的资源 必须对这种潜在的资源冲突进行预防 解决办法 在线程使用一个资源的时候 我们为其加锁即可 访问资源的第一个线程为其加上锁以后 其它线程便不能访问那个资源 除非获得那个
  • 刷脸支付助力互联网产业时代全面到来

    近两年来 刷脸支付发展如火如荼 宁波 长沙等多个城市相继开展线下刷脸支付试点 建设银在其网点的ATM机推出刷脸取款 光大银也将人脸识别应用于账户登陆 转账 线上融资等场景 支付宝 财付通等第三方支付公司也争相推出刷脸支付设备 随着移动支付的
  • cs231n: How to Train a Neuron Network 如何训练神经网络

    CS231N第六第七课时的一些笔记 如何训练神经网络是一个比较琐碎的事情 所以整理了一下 以后训练Neuron Network的时候可以看一下 Activation Functions ReLu good ELU leaky ReLu no
  • STL中的栈——stack

    stack为STL中的适配器容器 具有栈的结构特性 对于适配器容器 默认底层容器为deque 在创建stack对象时 也可以指定其他线性容器作为其底层容器 基本操作 include
  • AIX/Unix/Linux/HP-UX 系统中文字符集

    在运行环境Unix与Linux系统中遇到中文乱码 在查看后台运行日志时很不方便 于是在网上查看解决方法 经过以下内容可以解决这个问题 希望看到此篇的人能解决此题 针对不同系统可以选用字符集如下 AIX zh CN IBM eucCN Lin
  • 单片机毕业设计不用愁!!30篇单片机毕业设计参考案例

    单片机毕业设计不用愁 30篇单片机毕业设计参考案例 30篇单片机毕业设计参考案例 这篇文章分享给大四的小伙伴 是时候该准备毕业设计了吧 别偷懒了 第二学期就准备实习了喔 所以小编我就开始为你们准备资料啦 30篇单片机毕业设计参考案例给你们啦
  • Eclipse安装查看java字节码插件Bytecode Outline

    一 下载地址 download 选择适合你自己的eclipse的版本 二 安装 根据提示把下载的jar包放进对应的目录里面 然后重启就行了 我自己的是放在这个路径下 E eclipse jee kepler SR2 win32 eclips
  • 侯捷-C++面向对象高级开发(上)-complex类实现

    complex类实现 comlex h ifndef COMPLEX H define COMPLEX H include
  • 从Http请求中获取请求的实际IP地址

    public static String getRemoteIP HttpServletRequest request String ip null if ip null ip length 0 unknown equalsIgnoreCa
  • 【日志工具】g3log_6_ROS1中g3log的安装&使用

    ROS1中g3log的安装 使用 基于ros1 melodic版本进行封装使用 g3log库安装 git clone https github com KjellKod g3log git cd g3log git checkout c 1