boost log -- 使用心得和碰到的那些坑(二)

C++构建高性能RESTful API:从Boost.Beast实战到架构设计 RESTful API作为现代软件架构中服务间通信的核心协议,其性能与并发处理能力直接影响系统整体效率。其原理基于HTTP协议,通过标准方法对资源进行操作,实现无状态通信。在追求极致性能的场景下,如金融实时计算或高频数据处理,传统高级语言框架可能成为瓶颈。C++凭借其零成本抽象和对系统资源的精细控制,成为构建高性能网络服务的理想选择。通过集成Boost.Asio的异步I/O模型和Beast库,开发者可以构建出能够轻松应对C10K高并发挑战的服务端架构。结合线程池技术实现网络I/O与业务逻辑的分离,并利用nl 阅读详情

前一篇文章boost log – 使用心得和碰到的那些坑(一) 写了如何使用boost;;log, 这篇文章主要写写怎样用boost;;log构建一个工程,目的就是让用户使用时忘掉log细节。

项目依赖

boost c++11 cmake

设计

为了以后扩展方便,将log设计成接口。 接口提供基本的log功能:

class logger_iface
{
  public:
  public:
	logger_iface(void)= default;
	virtual ~logger_iface(void) = default;
	logger_iface(const logger_iface &) = default;
	logger_iface &operator=(const logger_iface &) = default;

  public:
	virtual void init() = 0;
	virtual void set_log_level(log_level level) = 0;
	virtual void debug_log(const std::string &msg, const std::string &file, std::size_t line) = 0;
	virtual void info_log(const std::string &msg, const std::string &file, std::size_t line) = 0;
	virtual void warn_log(const std::string &msg, const std::string &file, std::size_t line) = 0;
	virtual void error_log(const std::string &msg, const std::string &file, std::size_t line) = 0;
	virtual void critical_log(const std::string &msg, const std::string &file, std::size_t line) = 0;
};

boost logger 继承这个类。
前文已经提到了,boost logger 需要一个log core 一个sink,同时使用async backend。所以boost logger实现接口的同时加入这两个成员变量。

	boost::shared_ptr<sink_t> _sink;
	boost::log::sources::severity_logger_mt<log_level> lg;

利用前文所写的实现这几个函数,需要注意的是 log level其实就是设置boost;;log的 filter

void boost_logger::set_log_level(log_level level)
{
	m_level = level;
	if (_sink)
	{
		_sink->set_filter(expr::attr<log_level>("Severity") >= m_level);
	}
}

现在class功能都已经实现,如何使用呢?我们需要的就是__LOG(level, msg)这样简单的API。这需要有个全局的实例。
还有一个要考虑的是, boost;;logger没有提供文件及文件行号信息。
解决这个问题, 我们有个宏定义:

#define __LOG(level, msg)                              \
                                                       \
	{                                                  \
		tostringstream var;                            \
		var << "[fuction:" << __func__ << "] " << msg; \
		level(var.str(), __FILE__, __LINE__);          \
	}
#else
#define __LOG(level, msg)
#endif /* __LOGGING_ENABLED */

其实level是一个函数,msg提供了像std;;cout一样的用法。

下面我们看看level是怎么实现的:

void debug(const std::string &msg, const std::string &file, std::size_t line)
{
	if (active_logger)
		active_logger->debug_log(msg, file, line);
}

active_logger是一个全局的instance。

std::unique_ptr<logger_iface> active_logger(new boost_logger(log_level::error_level)); //nullptr;

至此,基本功能都已经实现了。
需要源代码,移步:https://github.com/maxcong001/boostlogger

C++ Boost搜索引擎核心:正排与倒排索引架构设计与实现 搜索引擎的核心技术在于索引机制,它通过构建高效的数据结构,实现从海量文本中快速定位信息。其基本原理分为正排索引与倒排索引:正排索引存储文档ID到内容的映射,便于结果展示;倒排索引则记录关键词到文档ID列表的映射,是实现毫秒级检索的关键。这种双索引架构的技术价值在于,它平衡了存储与查询效率,是信息检索领域的基石。在实际应用中,该技术广泛服务于企业内部文档检索、代码库搜索等特定场景。本文以C++和Boost库为基础,深入剖析了如何手动实现一套轻量级的双索引系统,详细讲解了从文档解析、分词、索引构建到查询处理与结 阅读详情

相关推荐

Boost.Geometry图形化调试实战:C++计算几何可视化开发指南

计算几何是处理空间数据与图形关系的核心领域,涉及点、线、面等基本几何对象的运算与关系判断。其原理基于数学中的几何学与拓扑学,通过算法实现空间关系的自动化判定与度量。在工程实践中,计算几何的技术价值在于为GIS、CAD、游戏开发、路径规划等应用提供可靠的空间分析能力,确保算法的正确性与鲁棒性。然而,几何算法的调试往往面临抽象数值难以直观理解的挑战,传统调试手段效率低下。Boost.Geometry作为C++强大的计算几何库,通过其图形化调试功能,将抽象的几何数据与运算结果以SVG等可视化形式呈现,使开发者能够

weixin_34279579的博客 313

vcpkg与CMake深度集成:Boost.Asio异步WebSocket服务器配置实战

在C++跨平台开发中,依赖管理和构建配置是提升工程效率的核心挑战。CMake作为主流的元构建系统,通过生成平台特定的构建文件来统一项目构建流程,而vcpkg则扮演了C++生态中包管理器的角色,解决了第三方库的获取、编译和安装问题。两者的深度集成能显著提升项目的可维护性和团队协作效率,尤其适用于需要集成复杂库(如Boost.Asio)的网络应用开发场景。本文以构建异步WebSocket服务器为例,详细解析了如何通过vcpkg的CMake工具链文件实现与CMake的无缝集成,并利用现代CMake的目标(Targ

weixin_34034670的博客 343

Simulink仿真入门:开环Buck-Boost变换器建模与参数计算全解析

DC-DC变换是电力电子技术的核心基础,它通过开关器件的高频通断实现电压的升降压转换,其核心原理是电感的伏秒平衡与电容的电荷平衡。在工程实践中,仿真建模是验证理论、优化设计的关键环节,能有效避免硬件试错成本。Simulink作为常用的系统级仿真平台,其模块库丰富,但初学者常面临模块选择与参数计算两大挑战。本文以经典的Buck-Boost变换器为例,深入剖析其仿真建模流程。内容涵盖从连续与离散仿真求解器的选择逻辑,到理想开关、线性电感电容等核心模块的选型依据,并重点详解了基于连续导通模式(CCM)的占空比、电

weixin_34174322的博客 306

boost::log重新启动时会清空之前日志文件内容 的问题解决

在应用程序中需要生成日志一边调试,QT有封装的日志级别(debug,info…),但是在UOS系统中debug级别的日志不能显示,而boost::log可以更灵活地设定自己的日志级别。是boost::log的日志接收器,自动注册到日志核心,如果不指定日志文件则默认将日志信息输出到console。下面函数用于将path路径对应的文件作为日志文件对象,使日志信息写入这个文件。: boost的智能共享指针,一、boost::log日志。

qq_41104439的博客 1119

【树莓派4B】八、树莓派软路由,Ubuntu18.04配置路由转发

我的目的是通过把树莓派做成一个软路由,相当于一个智能路由器。 材料 树莓派4B,操作系统其实可以是其他的Linux版本。以为4B自带无线网卡,就用自带无线网卡作为路由出口。 大概思路 具体步骤 配置两个网卡的IP sudo vim /etc/network/interface 这里设置静态IP,也可以动态获取。 #Local loopback auto lo iface lo inet loopback #Ethernet0 auto eth0 iface eth0 inet static addr

林愿留的博客 10万+

IC面试常考题 Verilog三分频电路设计(占空比50%,三分之一,三分之二)

实现三分频电路最简单的是: 利用计数器实现。 时序图分析(本人比较懒,平常科研忙,所以直接手画时序图了,懒得用软件画了): 直接上图分析:利用计数器每隔三个周期信号翻转一次,同时在不同的计数下翻转得到的同步信号 clk_1和clk_2,再利用异或即可实现出一个不同占空比的三分频信号(同样的方法也可扩展到其他奇数分频设计中)。 例如占空比50%: module Div_three( input clk, input rst_n, output div_three ); reg

qq_41884662的博客 1万+

【Boost】boost.log 要点笔记

常用简写: namespace logging = boost::log; namespace src = boost::log::sources; namespace expr = boost::log::expressions; namespace sinks = boost::log::sinks; namespace attrs = boost::log::attributes; nam...

橘嘉禾 723

74LS161/48 交通灯控制系统:30-5-20-5 时序逻辑电路 Multisim 仿真验证

本文详细解析了基于74LS161/48芯片的交通灯控制系统设计,通过Multisim仿真验证30-5-20-5时序逻辑电路。从系统架构搭建、状态机实现到波形分析,提供全流程操作指南与典型问题排查方法,助力数字电路课程设计高效完成。

weixin_26742753的博客 380

boost log的使用

以前使用log4cpp,boost增加了log库改用了boost的, 其实在用法上差不了太多 log影响性能最基本的有2个地方 一个是console显示,一个是auto_flush不通过缓存直接写入 1 #include "stdafx.h" 2 #include "SLog.h" 3 4 #include <stdexcept> 5 #inc...

weixin_30378311的博客 473

从零到一:Quartus II连接开发板实战,打通绘图、管脚分配、编译与下载全链路

本文详细介绍了使用Quartus II软件连接FPGA开发板并完成首个项目的全流程。从硬件连接到驱动安装,到绘制电路框图、精准分配管脚,再到编译设置与最终下载,手把手指导您打通从设计到硬件实现的完整链路,是FPGA初学者的实战入门指南。

mqtt6iot的博客 717

软件设计师---计算机系统

软件设计师---计算机系统

我从不打没有准备的仗! 3万+

Boost Log库使用初步

从Java转到c++后,一直对log4j念念不忘,尝试过log4cplus,可能是版本选择的问题,程序中时常出现因为log而崩溃的问题,后来发现boost.log库出了,而项目中boost库基本是必用的,所以直接拿来用了。 boost.log库的介绍就不在这里啰嗦了,详见官网:http://...

choubianuy44343的博客 291

Power EM与Signal EM解决办法与原理分析

1.面对power EM,首先检查missing via,补全via,还可以加宽,加密局部power mesh,一些power IO出pin有power EM问题,可以叠加多层线和垂直方向补power形成网络降低并联电阻和提供更多电流通路解决,这种方法还可以降低ir drop。3.先进工艺有一个via ladder的方法可以解决power/signal em问题,clock cell出pin绕线或者power rail连接power stripe通过搭梯子的方式连接,原理还是分流。

m0_61544122的博客 4749

boost log -- 使用心得和碰到的那些坑(一)

boost log -- 使用心得和碰到的那些坑定义日志记录 Log record属性 attribute属性值(属性)值访问(属性)值提取Log sink日志源Log source日志过滤器Log filter日志格式化工具Log formatter日志核心Logging core国际化 i18n线程本地存储 TLS实时类型信息RTTI实现日志源属性和属性值日志核心和过滤实现需求减少对程序运行...

Max_Cong的博客 1万+

DaVinci配置DID之三:代码实现

本系列主要基于DaVinCi工具链来展开具体DID读写的配置以及最终实现。1,CDD准备2,工具链配置3,代码实现4,验证结果本文讲述流程3话不多说,走你~博主是AutoSar小白,如果哪里表达的有问题,还请大佬们指点指点哈。接下来,让我们在下章关于测试验证的博文再相会哈~

weixin_48498880的博客 5361

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

boost log -- 使用心得和碰到的那些坑(三)

为什么有这篇文章(what) 前面曾经写过两篇文章关于boost::logger的。 当时只是想学习一下怎么使用boost::logger。 前两天再次看到这个rep。想再完善一下这个rep, 用这篇文章记录一下过程和想法。 原来的rep有什么缺陷?(why) 在生产实践中,作为调试需求, log功能可能会被频繁的调用。原来的rep每次调用以后,虽然不会写到boost::log中,但是都已经组装...

Max_Cong的博客 2583

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

boost.log历险记要

为什么80%的码农都做不了架构师?>>> ...

weixin_34203832的博客 84

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C++与Boost库实战:从零构建本地搜索引擎核心模块

搜索引擎是现代信息检索的核心技术,其核心原理是通过倒排索引实现海量数据的快速查找。倒排索引将文档内容映射为关键词到文档列表的关联结构,从而将查询复杂度从线性搜索降至接近常数级别。这项技术的工程价值在于能够高效处理TB甚至PB级数据,广泛应用于网页搜索、企业文档检索和日志分析等场景。本文以C++和Boost库为技术栈,深入探讨如何实现一个高性能的本地搜索引擎,重点解析了倒排索引的构建过程与查询处理机制,并详细介绍了Boost.Filesystem在跨平台文件操作以及Boost.StringAlgorithms

weixin_33719619的博客 350

C++日志库选型指南:从Qt项目实践到18种方案对比

日志系统是软件开发的“黑匣子”,其核心在于记录程序运行状态,辅助问题诊断与系统监控。其工作原理通常涉及日志采集、格式化、过滤与输出等环节。一个设计良好的日志库能显著提升软件的可维护性与稳定性,尤其在多线程、高性能场景下价值凸显。在C++生态中,日志库选型需权衡性能、功能与集成复杂度。本文聚焦**spdlog**与**glog**等热门方案,结合Qt框架特性,深入探讨异步日志、线程安全等工程实践,为不同应用场景提供系统化的选型决策框架。

weixin_30920853的博客 340

Boost.Beast HTTP分块传输编码实战:从原理到流式服务器构建

HTTP分块传输编码是HTTP/1.1协议中的一项核心特性,它允许服务器在未知响应体总大小的情况下,将数据分割成一系列带有大小信息的“块”进行流式传输。其工作原理是通过在响应头设置`Transfer-Encoding: chunked`,并在数据体中使用十六进制块大小与CRLF分隔符来组织数据流,最后以零长度块标记结束。这项技术的核心价值在于支持动态内容生成、实时数据推送和大文件处理等场景,有效突破了传统`Content-Length`头部对数据长度必须预先可知的限制。在C++网络编程中,Boost.Bea

weixin_30911451的博客 445

从Boost.Asio迁移到mbedtls:支付网关TLS安全加固与后量子密码实践

TLS/SSL协议是保障网络通信安全的基石,其核心在于通过公钥基础设施和证书链验证机制实现身份认证与数据加密。在金融支付等高安全场景中,证书链的完整性与严格验证至关重要,任何验证逻辑的疏漏都可能导致中间人攻击等严重风险。本文深入剖析了在特定配置下,由于对底层OpenSSL验证标志理解不足,可能引发的证书链验证绕过问题,并分享了从Boost.Asio迁移至mbedtls的实战经验。mbedtls以其极简、模块化和高可控性的设计,为开发者提供了从握手流程到证书验证的全链路透明控制,有效杜绝了此类安全隐患。同时,

weixin_34038293的博客 412

C++ Boost.Asio实现多线程端口扫描器:从异步I/O到性能优化

网络编程的核心在于高效处理并发连接,而异步I/O模型是实现这一目标的关键技术。通过操作系统提供的I/O多路复用机制,程序可以用少量线程管理大量网络套接字,在连接就绪时通过回调函数处理,从而极大提升吞吐量。这种技术在构建高性能网络工具时具有重要价值,例如端口扫描器就需要快速探测大量目标端口的状态。本文以C++ Boost.Asio库为基础,深入剖析了如何利用异步I/O和多线程技术实现一个高效的端口扫描器,重点解决了超时控制、线程同步等工程实践问题,并探讨了线程池和连接池等性能优化方案,为网络诊断和系统运维提供

weixin_30706691的博客 404

介绍几个C++开发人员常使用的小工具

[原创]1. 资料收集    我一般使用websaver这个免费工具收集网络上的资料,以及自己写的心得也在里面,感觉很方面,对于积累和查找很方便.  只要将网页相关内容直接拖入浮动窗口即可保存选中的网页。2. C++基本开发库   STL & Boost这两个库很重要,STL必不可少, Boost也发挥着重大作用.3. C++网络开发库   作为Server开发的有力工具就是ACE了,使用两年多来,感觉很棒,模式很清晰,服务器结构很合理。   下载地址: http://www.cs.wustl.edu/~s

samzboy的专栏 514

C++函数签名萃取利器:Boost.LEAF function_traits深度解析与应用

在C++元编程与泛型编程中,类型萃取是一项基础且关键的技术,它允许开发者在编译期获取和操作类型信息。其核心原理是通过模板特化、SFINAE等编译期技术,对类型系统进行静态反射。这项技术的价值在于能够实现高度通用的代码,减少重复的样板代码,提升库和框架的灵活性与安全性。在函数包装器、回调系统、序列化框架等应用场景中,经常需要精确获取可调用对象的签名信息(如返回类型、参数类型、参数个数等)。Boost.LEAF库中的function_traits工具正是为此而生,它提供了一个统一且强大的接口,能够精准地从函数指

weixin_34159110的博客 304
上一篇: boost log -- 使用心得和碰到的那些坑(一)
下一篇: C++ 异步编程探索(一) task链式调度 -- future CONTINUATION
Max_Cong
博客等级 码龄10年 281粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值