c++中log4cplus日志库引用

c++中log4cplus日志库引用

    • 源码地址:
    • 编译及安装
    • 主要能力:
    • 使用 log4cplus 的基本步骤和示例代码
    • 使用示例:
      • 标准使用示例:
      • 简洁使用示例:
      • 异步模式使用:

Log4cplus是一个C++的日志库,它提供了灵活的日志记录功能,类似于Java的Log4j。它支持多种日志记录方式,包括控制台、文件、网络等。Log4cplus允许开发者通过配置文件来定义日志级别、日志格式、输出目的地等,非常适合需要进行日志管理的C++应用程序。

源码地址:

https://github.com/log4cplus/log4cplus

编译及安装

tar xvf log4cplus-2.0.6.tar.xz
cd log4cplus-2.0.6
mkdir build
cd build
cmake ..
make
sudo make install

主要能力:

  1. 多线程支持:Log4cplus设计时考虑了多线程环境,能够安全地在多线程应用程序中使用。
  2. 灵活的配置:可以通过XML、YAML或直接通过代码来配置日志系统,包括日志级别、输出格式、输出目的地等。
  3. 灵活的配置:可以通过XML、YAML或直接通过代码来配置日志系统,包括日志级别、输出格式、输出目的地等。
  4. 多种输出目的地:支持将日志输出到控制台、文件、网络(如Syslog)、SMTP(发送邮件)等多种目的地。
  5. 日志级别:提供了DEBUG、INFO、WARN、ERROR、FATAL等日志级别,可以根据需要设置记录的日志级别。
  6. 自定义日志格式:用户可以自定义日志的输出格式,包括时间戳、日志级别、消息等。
  7. 过滤器:可以添加过滤器来控制日志消息的输出,例如,只记录特定级别的日志。
  8. 性能:Log4cplus在设计时考虑了性能,尽量减少日志记录对应用程序性能的影响。
  9. 滚动日志文件:支持日志文件滚动,即当日志文件达到一定大小或一定时间后,自动创建新的日志文件。
  10. 异步日志记录:可选的异步日志记录功能,可以提高应用程序的性能,减少日志记录对主线程的影响。
  11. Hierarchical Logging:支持分层日志记录,允许用户为不同的类或模块设置不同的日志级别。
  12. Appenders:Log4cplus使用Appender的概念来定义日志的输出方式,可以自定义Appender来扩展日志功能。

使用 log4cplus 的基本步骤和示例代码

  1. 实例化 Appender 对象:创建一个 Appender 来指定日志消息的输出位置,例如控制台、文件或网络。一个 Logger 可添加多个 Appender,从而向多个地方输出日志。
  2. 实例化 Layout 对象:创建一个 Layout 来定义日志消息的输出格式。
  3. 将 Layout 绑定到 Appender:将 Layout 对象绑定到 Appender 对象上,以确定日志的输出格式。
  4. 实例化 Logger 对象:使用 log4cplus::Logger::getInstance(“logger_name”) 获取 Logger 实例,并设置其日志输出等级阈值。
  5. 将 Appender 绑定到 Logger:将 Appender 对象添加到 Logger 实例上。
  6. 设置 Logger 的优先级:可选步骤,用于控制日志输出的详细程度。

使用示例:

标准使用示例:

#include <log4cplus/logger.h>
#include <log4cplus/consoleappender.h>
#include <log4cplus/layout.h>
using namespace log4cplus;
int main() {SharedObjectPtr<Appender> _append(new ConsoleAppender());_append->setName("append for test");std::string pattern = "%d{%m/%d/%y %H:%M:%S} - %m [%l]%n";std::auto_ptr<Layout> _layout(new PatternLayout(pattern));_append->setLayout(_layout);Logger _logger = Logger::getInstance("test");_logger.addAppender(_append);_logger.setLogLevel(ALL_LOG_LEVEL);LOG4CPLUS_DEBUG(_logger, "This is the FIRST log message...");
}

简洁使用示例:

#include <log4cplus/logger.h>
#include <log4cplus/consoleappender.h>
using namespace log4cplus;
int main() {SharedAppenderPtr _append(new ConsoleAppender());_append->setName("append test");Logger _logger = Logger::getInstance("test");_logger.addAppender(_append);LOG4CPLUS_DEBUG(_logger, "This is the FIRST log message...");
}

异步模式使用:

  • 在多线程环境中,为了避免日志输出时的冲突,可以使用异步模式。
  • 发送日志到日志服务器:
#include <log4cplus/log4cplus.h>
int main() {log4cplus::Initializer initializer;log4cplus::SharedAppenderPtr appender(new log4cplus::SocketAppender(LOG4CPLUS_TEXT("localhost"), 32015, LOG4CPLUS_TEXT("test")));appender->setName(LOG4CPLUS_TEXT("logserver"));log4cplus::Logger logger = log4cplus::Logger::getInstance(LOG4CPLUS_TEXT("test"));logger.setLogLevel(log4cplus::INFO_LOG_LEVEL);logger.addAppender(appender);LOG4CPLUS_INFO(logger, LOG4CPLUS_TEXT("Hello world"));
}

这些示例展示了如何配置和使用 log4cplus 进行基本的日志记录。大家可以根据项目的需求调整 Appender、Layout 和 Logger 的配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/32741.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于CDMA的多用户水下无线光通信(1)——背景介绍

研究生期间做多用户水下无线光通信&#xff08;Underwater Optical Wireless Communication&#xff0c;UOWC&#xff09;&#xff0c;写几篇博客分享一下学的内容。导师给了大方向&#xff0c;让我用直接序列码分多址&#xff08;Direct Sequence Code Division Multiple Acce…

创建指定数值范围的数组

导入numpy import numpy as np 1. 创建指定数值范围的数组 数值范围[1, 12)&#xff0c;步长为2 # start 表示开始值 stop 表示结束值 step 表示步长 n1 np.arange(1,12,2) n1 2. 创建等差的数组 7500-10000&#xff0c;6等分&#xff0c;结束点包含 # linspace: …

塞贝壳效应

塞贝克效应&#xff08;Seebeck effect&#xff09;&#xff0c;通常被称为第一热电效应&#xff0c;是由托马斯约翰塞贝克&#xff08;Thomas Johann Seebeck&#xff09;在1821年发现的一种热电现象。这个效应描述了当两种不同的导体或半导体在它们的接点处有温度差时&#x…

containerd手动配置容器网络

containerd手动配置容器网络 机器详情nerdctl启动一个不带网络的容器获取容器ID、PID与network namespace路径准备bridge插件的执行配置文件通过下面的命令调用bridge插件准备tuning插件文件执行下面的命令调用tuning插件准备portmap插件文件执行下面的命令调用portmap插件删除…

SFF1006A-ASEMI无人机专用SFF1006A

编辑&#xff1a;ll SFF1006A-ASEMI无人机专用SFF1006A 型号&#xff1a;SFF1006A 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220F 最大平均正向电流&#xff08;IF&#xff09;&#xff1a;10A 最大循环峰值反向电压&#xff08;VRRM&#xff09;&#xff1a;600V 最大…

富文本编辑器CKEditor

介绍 富文本编辑器不同于文本编辑器,它提供类似于 Microsoft Word 的编辑功能 在Django中,有可以现成的富文本三方模块django-ckeditor,具体安排方式: pip install django-ckeditor==6.5.1官网:Django CKEditor — Django CKEditor 6.7.0 documentation 使用方式 创建项…

QT事件处理系统之三:子类化QPushButton后,对事件进行相应处理后,自定义按钮无法发出clicked信号的问题

1、信号槽绑定 如下,Widget中进行了SelfButton按钮的信号槽绑定。 Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi

Kubernetes之Pod详解

如何更好的使用好Pod&#xff1f;本文尝试从Pod组成、Namespace共享、控制器实现原理及Pod设计原则4个方面对Pod的使用进行详细阐述&#xff0c;希望对您 一、 Kubernetes Pod介绍 在 Kubernetes 中&#xff0c;Pod 是最小的可部署单元&#xff0c;包含一个或多个容器。Pod 提…

VBA学习(17):使用条件格式制作Excel聚光灯

今天给大家分享的表格小技巧是制作聚光灯。 先说一下啥是聚光灯。所谓聚光灯&#xff0c;可以简单理解为对工作表的行列填充颜色&#xff0c;突出显示被选中的单元格&#xff0c;仿佛该单元格被聚光灯照亮似的。聚光灯有助于肉眼识别所选中的单元格或区域&#xff0c;提高数据…

WHAT - NextJS 系列之 Rendering - Server Components

目录 一、Server Components1.1 Server Components特点使用 1.2 Client Components特点使用 1.3 综合使用示例1.4 小结 二、Server Components 优势三、Streaming 特性3.1 基本介绍和使用Streaming的理解工作原理使用示例服务器端组件客户端组件页面流程解释 3.2 HTTP/1.1和HTT…

【启明智显产品介绍】工业级HMI芯片Model3C详解(二)图像显示

Model3C芯片国产自主的工业级高清显示与智能控制 MCU&#xff0c;配备强大的 2D 图形加速处理器、PNG/JPEG 解码引擎&#xff0c;可以满足多种交互设计场景和多媒体互动需求&#xff0c;具备高可靠性、高开放性&#xff0c;可广泛应用于工业自动化控制、HMI人机交互、串口屏、智…

拖拽劫持与数据窃取

2010 年&#xff0c;ClickJacking 技术有了新的发展。一位名叫 Paul Stone 的安全研究者在 BlackHat 2010 大会上发表了题为“Next Generation Clickjacking”的演讲。在该演讲中&#xff0c;提出了“浏览器 拖拽事件”导致的一些安全问题。 目前很多浏览器都开始支持 Drag &a…

构造函数实现依赖注入

构造函数注入是依赖注入&#xff08;Dependency Injection&#xff09;的一种形式&#xff0c;它允许您在创建对象时&#xff0c;将对象所需的依赖项通过构造函数传递给它&#xff0c;而不是在对象内部自己创建或查找这些依赖项。这有助于增强代码的可测试性和可维护性&#xf…

【database2】redis:优化/备份/订阅

文章目录 1.redis安装&#xff1a;加载.conf2.操作&#xff1a;set/get&#xff0c;push/pop&#xff0c;add/rem3.Jedis&#xff1a;java程序连接redis&#xff0c;拿到jedis4.案例_好友列表&#xff1a;json om.4.1 前端&#xff1a;index.html4.2 web&#xff1a;FriendSer…

谈谈面试常考题:懒加载,防抖,节流(方法实现详解)

前言 最近在学习中确实收获了挺多东西&#xff0c;其中我觉得有必要拿来进行分享一下的就是懒加载了&#xff0c;还有相关的防抖和节流。因为在浏览器中这些都是属于很常见的性能优化&#xff0c;面试也是常考题。话不多说&#xff0c;速度发车。 什么是懒加载&#xff1f;懒…

【Conda取消默认进入base环境】取消命令行前出现的base

安装conda后取消命令行前出现的base&#xff0c;取消每次启动自动激活conda的基础环境 方法一&#xff1a; 每次在命令行通过conda deactivate退出base环境回到系统自带的环境 方法二 1&#xff0c;通过将auto_activate_base参数设置为false实现&#xff1a; conda config …

热题系列章节6

297. 二叉树的序列化与反序列化 序列化是将一个数据结构或者对象转换为连续的比特位的操作&#xff0c;进而可以将转换后的数据存储在一个文件或者内存中&#xff0c;同时也可以通过网络传输到另一个计算机环境&#xff0c;采取相反方式重构得到原数据。 请设计一个算法来实现…

力扣(2024.06.23)

1. 62——不同路径 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。问总共有多少条不同的路径&a…

Android面试题精选——再聊Android-Handler机制

​ static final ThreadLocal sThreadLocal new ThreadLocal(); //创建当前线程的Looper对象 private static void prepare(boolean quitAllowed) { if (sThreadLocal.get() ! null) { throw new RuntimeException(“Only one Looper may be created per thread”); } sThre…

华为欧拉 openEuler24.03 更新 阿里 yum源

华为欧拉 openEuler24.03 更新 阿里 yum源 备份 yum 源编写 阿里云 yum源 配置文件更新 yum 缓存 备份 yum 源 mv /etc/yum.repos.d/openEuler.repo /etc/yum.repos.d/openEuler.repo.bak编写 阿里云 yum源 配置文件 vim /etc/yum.repos.d/openEuler.repo内容如下&#xff…