log4cplus: 一个好用的日志模块。编译以及使用

news2024/11/22 21:54:21

log4cplus 日志

介绍

log4cplus 是一个 C++ 版本的日志库,它是 Apache 组织的 log4j 日志库的一个开源实现。log4cplus 提供了一个灵活的、高性能的日志系统,支持多线程、本地化和分层结构。

log4cplus 的主要特点如下:

  • 灵活性:log4cplus 提供了灵活的配置机制,可以在运行时动态地修改日志级别、追踪器、Appender 等配置信息。同时,log4cplus 通过继承结构、过滤器、日志记录器等机制,提供了更加高度自定义化的配置。
  • 高性能:log4cplus 使用多线程技术,可以高效地处理大量的日志记录请求,同时支持异步日志记录,减小了日志记录对应用程序性能的影响。
  • 多平台支持:log4cplus 可以跨平台运行,可以在 Windows、Linux、Unix 等平台上使用。
  • 多语言支持:log4cplus 支持本地化,它可以输出不同语言的日志信息。

使用 log4cplus,我们可以使用不同级别的日志记录来控制日志信息的输出,从而帮助我们快速定位和修复问题。此外,log4cplus 还支持多个日志记录器,可以让我们对不同模块的日志信息进行不同的控制和输出。

直接使用

您可以从 log4cplus 的官方网站上下载 log4cplus,网站地址为:http://log4cplus.sourceforge.net。

在网站上,您可以找到最新版本的 log4cplus 以及相关的文档和示例代码。下载 log4cplus 的方法如下:

  1. 打开 log4cplus 的官方网站:http://log4cplus.sourceforge.net。
  2. 在“Downloads”页面,选择适合您系统的版本下载。您可以下载源代码或者预编译的二进制文件。
  3. 解压下载的文件,按照文档说明进行安装和配置。
  4. 如果您需要使用 log4cplus 的扩展功能,您还需要下载相应的扩展库。

安装好 log4cplus 后,您就可以开始使用了。在代码中引用相关的头文件,并使用 log4cplus 提供的 API 进行日志记录

编译

  1. 准备工作
    国内的镜像:https://gitcode.net/mirrors/log4cplus/log4cplus
    github地址:https://github.com/log4cplus/log4cplus
    注意,需要更新子模块,catch,threadpool

  2. window下cmake
    在这里插入图片描述
    ps 需要注意的点,1.宏 WITH_UNIT_TESTS 取消打勾 2.填写自己的安装路径
    这边我用的是vs2019,x64

  3. sln 项目
    找到log4cplus.sln,建议给目前全部权限(碰到过由于权限不够,无法创建文件夹)。
    在这里插入图片描述
    对了,之前也有人说项目要Unicode字符集,cmake生成的项目都是符合要求的。
    直接编译 – lib目录在src/Release或者Debug,动态库在bin目录下

项目添加log4cplus

  1. 右键 vs项目INSTALL,就会生成在之前cmake上的配置的路径下
    在这里插入图片描述
    自己可以在这个基础上细分debug和release
  2. 添加lib以及include
	在VC目录下的库目录中加入logModule\lib以及包含目录加入.\logModule\include
	//加载库
	#ifdef _WIN64
	#ifdef _DEBUG
	#pragma comment(lib,"logModule/lib/log4cplusUD.lib")
	#else
	#pragma comment(lib,"logModule/lib/log4cplusU.lib")
项目:**ISO C++20 标准 (/std:c++20)**,c++语言标准:**ISO C++20 标准 (/std:c++20)**
  1. 具体用法
    其实网上有很多可以参考的,可以用配置文件或者直接在代码里面配置。

log4cplus 的基本使用步骤如下:

  • 引入头文件:包含 log4cplus/logger.h 和 log4cplus/configurator.h 头文件。
  • 初始化配置:在程序初始化时调用 log4cplus 的配置器进行配置。如下所示:
	#include <log4cplus/logger.h>    
	#include <log4cplus/configurator.h>
    log4cplus::initialize();   
    log4cplus::BasicConfigurator::doConfigure();  

这里使用了 BasicConfigurator 进行基本配置,您也可以使用 XMLConfigurator 或者PropertyConfigurator 进行更加灵活的配置。

  • 创建日志记录器:使用 getLogger() 方法创建一个日志记录器。如下所示:
	#include <log4cplus/logger.h>    
	log4cplus::Logger logger = log4cplus::Logger::getInstance(LOG4CPLUS_TEXT("main"));
  • 记录日志:调用日志记录器的方法,如 DEBUG、INFO、WARN、ERROR 和 FATAL 等级别的记录方法。如下所示:
	LOG4CPLUS_DEBUG(logger, "This is a debug message.");   
    LOG4CPLUS_INFO(logger, "This is an info message.");   
    LOG4CPLUS_WARN(logger, "This is a warning message.");   
    LOG4CPLUS_ERROR(logger, "This is an error message.");   
    LOG4CPLUS_FATAL(logger, "This is a fatal message.");
  • 也可以在记录日志的时候,使用 printf-style 的格式化方式加入参数,例如:
	LOG4CPLUS_DEBUG_FMT(logger, "This is a debug message with number:%d.", 123);
  • 关闭日志系统:在程序结束时调用 log4cplus 的 shutdown() 方法关闭日志系统。
	log4cplus::Logger::shutdown();
  • 自定义配置:如果您需要自定义配置,例如输出到文件或者使用其他 Appender,则可以使用 PropertyConfigurator 或者 XMLConfigurator 进行配置。例如:
	log4cplus::PropertyConfigurator config("log4cplus.properties");
	config.configure();

log4cplus.properties

	# ALL TRACE  DEBUG  INFO  WARN  ERROR  FATAL  OFF
	log4cplus.rootLogger = TRACE,SA
	log4cplus.logger.logConsole = TRACE,LC
	
	#For database stuff, I don't need to logging everything, it's enough printing only errors!
	#log4cplus.logger.DatabaseOperations=ERROR
	#log4cplus.additivity.file=false
	
	log4cplus.appender.LC=log4cplus::ConsoleAppender
	log4cplus.appender.LC.EnCoding=utf-8
	log4cplus.appender.LC.layout=log4cplus::PatternLayout
	log4cplus.appender.LC.layout.ConversionPattern=[%D{%Y-%m-%d %H:%M:%S}] %m [%l]%n
	 
	#设置日志追加到文件尾
	log4cplus.appender.SA=log4cplus::TimeBasedRollingFileAppender 
	//log4cplus.appender.SA.File = Mylogger.log
	# 必须要先手动创建好log目录;否则无法创建文件
	log4cplus.appender.SA.FilenamePattern= ./log/%d{yyyy-MM-dd_HH-mm}.log
	log4cplus.appender.SA.Schedule = MINUTELY
	log4cplus.appender.SA.CreateDirs = true
	log4cplus.appender.SA.MaxHistory = 9999
	log4cplus.appender.SA.RollOnClose = false
	#设置日志文件大小
	log4cplus.appender.SA.MaxFileSize = 100MB
	#设置生成日志最大个数
	log4cplus.appender.SA.MaxBackupIndex = 100
	log4cplus.appender.SA.Append = true
	log4cplus.appender.SA.layout=log4cplus::PatternLayout
	log4cplus.appender.SA.layout.ConversionPattern=[%-5p][%D{%m/%d/%y %H:%M:%S:%Q}] [%t] %c - %m [%l]%n
	 
	#设置日志级别范围
	log4cplus.appender.SA.filters.1=log4cplus::spi::LogLevelRangeFilter
	log4cplus.appender.SA.filters.1.LogLevelMin=DEBUG
	log4cplus.appender.SA.filters.1.LogLevelMax=FATAL
	log4cplus.appender.SA.filters.1.AcceptOnMatch=true
	log4cplus.appender.SA.filters.2=log4cplus::spi::DenyAllFilter

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

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

相关文章

jetson nx 用windows远程连接

VNC Viewer远程连接 一、jetson nx配置vnc 1、安装客户端 sudo apt-get install xrdp vnc4server xbase-clients2、进入nano/nx桌面&#xff0c;打开“Setting–>Desktop sharing”&#xff0c;没反应&#xff0c;据说是bug&#xff0c;我试过nano和nx都一样。首先输入下…

研发效能管理中的经典度量——DORA 指标

有一个组织&#xff0c;每年都会基于对相关从业者的调研和分析&#xff0c;发布一份《DevOps 行业状态报告》&#xff0c;揭秘研发团队的 DevOps 健康状况和平均效能水平&#xff0c;至今已持续了 9 年。目前&#xff0c;全球有超过三万名专业人士参与该调研&#xff0c;而它也…

前端路由+原生JS实现SPA

●前端路由 ●路由: 就是一一对应关系的集合 ●前端路由: 就是一个 url 地址, 对应哪个组件(页面) ●前端路由的本质 ○根据地址栏变化(不重新想服务器发送请求), 去局部更新不同的页面内容, 完成前端业务场景切换 ●前端路由的思路 ○URL 地址栏中的 Hash 值发生了变化 ○前端…

[JAVA] 图书管理系统

前言 1. 基本情况 2. 基本思路 3. 类的创建 Book包底下类有实现 &#xff08;1&#xff09;Book类 - 图书类 &#xff08;2&#xff09;BookList - 书架类 operation包底下类的实现(包含7个类,一个接口) &#xff08;1&#xff09;IOperation接口 - 功能接口 &…

蓝精灵协会每周社区会议|延长水晶铸造期限以及游戏重启计划

蓝精灵协会每周社区会议来啦&#xff01;我们已经把活动名称从「AMA」改为「市政会议厅」&#xff0c;因为该会议的目的是倾听社区反馈和进行讨论。当然&#xff0c;我们仍然非常欢迎你提出问题&#xff01; 本次市政会议厅涵盖四个主题&#xff1a; 延长水晶铸造时间的投票结果…

scrollIntoView的基本定义、以及Vue3、vue2中使用: 点击导航滚动到对应区域。

1. 基本定义 MDN 关于scorllIntoView的介绍 Element 接口的 scrollIntoView() 方法会滚动元素的父容器&#xff0c;使被调用 scrollIntoView() 的元素对用户可见。 scrollIntoView()scrollIntoView(alignToTop)scrollIntoView(scrollIntoViewOptions) 1. alignToTop 可选 alig…

aws Automation

In order to save money, CloudFormation terminates the resources from the template Systems Manager will handle on-premises and EC2 instance patches Caching Amazon CloudFront 是一种内容分发网络 (CDN) 服务&#xff0c;旨在获得优异性能、安全性和开发人员便利性…

A股市场上股票行情数据接口有那几种?

L2行情数据接口相比Level-1接口相比&#xff0c;L2行情市场具有数据更完整、推送速度更及时的优势&#xff0c;帮助投资者及时把握盘中主要资金流&#xff0c;做出更准确的投资决策。简而言之&#xff0c;Level-2最大的作用就是提前看到主力的大单&#xff0c;对于追逐日线跌停…

js解析jwt中的数据,将base64转为json方式,以及需要注意的地方

jwt前端解析 ​当我们做前后端分离项目时&#xff0c;需要将jwt保存在前端&#xff0c;有时候需要将jwt中的数据解析出来&#xff0c;网上有很多用第三方组件的方式&#xff0c;但是js的原生方法就也可以解决&#xff0c;虽然存在兼容等问题&#xff0c;但是修改一下也是可用的…

“新白色战场”增长公式发布丨数说故事2023低温鲜奶洞察

重点内容抢先看 低温鲜奶成为乳制品品类新的增长点&#xff0c;头部品牌纷纷入局&#xff0c;“新白色战场”厮杀逐年激烈。 数说故事发布《2023低温鲜奶品类洞察报告》&#xff0c;根据近两年社媒电商数据深度分析&#xff0c;总结出低温鲜奶品类增长公式。 产品力 口感性价…

ElasticSearch 同步MySQL数据方案汇总

叙述 在实际项目开发中&#xff0c;我们经常将Mysql作为业务数据库&#xff0c;ES作为查询数据库&#xff0c;用来实现读写分离&#xff0c;缓解Mysql数据库的查询压力&#xff0c;应对海量数据的复杂查询。这其中有一个很重要的问题&#xff0c;就是如何实现Mysql数据库和ES的…

Matlab如何隐藏坐标轴框线,但保留刻度及刻度标签

假如我们用Matlab绘制了这样一幅堆叠图&#xff1a; 看起来&#xff0c;哪哪都好&#xff0c;但就是感觉两条黑色的坐标轴框线有些碍事。 于是想&#xff0c;该怎么去掉呢&#xff1f; 网上对于这一问题比较常见的解答是&#xff0c;将坐标轴颜色设置为背景颜色&#xff1a; …

2023,没有人不想做黄牛

【潮汐商业评论/原创】 “没办法啊&#xff0c;只能退票了。”作为奶茶十几年的老粉&#xff0c;好不容易从其他粉丝手里买到票的Sarah无奈道。 “刘若英&#xff0c;12小时内退票”、“梁静茹&#xff0c;24小时内退票”…… 近日“演唱会闹退票”登上了热搜。起因是5月7日&…

nuitka打包python的PyQt5成exe可执行文件

使用nuitka打包python的PyQt5 可以打包多文件,也可以打包单文件。 使用的python版本是3.8.10 1、下载gcc 方式1:可以到网站下载,点我跳转 方式2:可以直接去网盘下载,点我跳转 提取码:8888 网盘里面也有python3.8.10的安装包,下载后直接安装即可。 下载64位 win…

CoolShell 博客备份QA问答

芝兰生于深谷&#xff0c;不以无人而不芳; 君子修身养德&#xff0c;不以穷困而改志 这是左耳朵耗子-陈皓[1]的座右铭&#xff0c;他的中文技术博客酷壳 - CoolShell[2]可能是许多技术人员的圣地&#xff0c;至少对我来说是的。 coolshell_talk 他在极客时间的专栏&#xff0c;…

深度学习--主动学习

主动学习简介 主动学习是指对需要标记的数据进行优先排序的过程&#xff0c;这样可以确定哪些数据对训练监督模型产生最大的影响。主动学习是一种学习算法可以交互式查询用户(teacher 或 oracle)&#xff0c;用真实标签标注新数据点的策略。主动学习的过程也被称为优化实验设计…

Oracle 存储过程语法

Oracle 存储过程语法 1. 创建表&#xff08;测试数据准备&#xff09; -- 创建用户表 create table TT_USER (USERID NUMBER(10),USERNAME VARCHAR2(255),PASSWORD VARCHAR2(255),SEX VARCHAR2(1) );INSERT INTO TT_USER VALUES (101, zhang, 111, 1); INSERT INTO TT…

Win11校园网不弹出登录页面怎么回事?

Win11校园网不弹出登录页面怎么回事&#xff1f;最近有用户在使用校园网的时候遇到了一些问题&#xff0c;访问登录网站的时候&#xff0c;一直无法显示登录的界面。那么遇到这个情况如何去进行解决呢&#xff1f;一起来看看以下的解决方法分享吧。 解决方法如下&#xff1a; 方…

【零基础学机器学习 2】 机器学习的实操步骤-以及在Python中实现机器学习模型

文章目录 1. 收集数据2. 准备数据3. 选择模型4. 训练模型5. 评估模型6. 参数调整7. 进行预测在Python中实现机器学习模型 机器学习是一种人工智能的分支&#xff0c;它使用算法和统计模型来让计算机系统自动地从数据中学习&#xff0c;并根据学习结果做出预测或决策。机器学习的…

智能双向嵌入式UART转CAN模块 串口 RS232 RS485 UART CAN转换器

CANUART-100TL系列智能双向UART转CAN模块具有一路TTL UART串口通道和一路CAN通道&#xff0c;实现CAN与串口 UART之间的双向数据智能转换。超小型灌封模块设计&#xff0c;方便用户集成到电路板上&#xff0c;快速通过MCU的UART口扩展CAN通道。 智能双向UART转CAN模块提供“…