在C++中不用宏怎么打日志的使用建议

使用建议

从上面的使用可以看出,std::source_location 可以以函数的形式进行调用,从而避免了使用宏所产生的一些弊端。

但是由于使用的方式一般是以默认参数进行的,因此不是适合变参的情况,除非在外部传入 std::source_location::current(),这一定程度上限制了使用。

应用场景举例

假设在我们封装了一个 IO 的操作类,并封装了一层形如 size_t write(const char* msg, size_t len); 的函数,用来发送数据。

在开发过程中常常希望看到一些调用的情况。一般来说我们可以在外部调用时,先自行打印 msg,并获取返回值后再打印结果。这些操作非常简单,更重要的是使用的非常频繁。

当我们再项目中不断打印这些数据的时候,若不及时删除,则会出现洪水般的日志信息,这些信息可能由于不同开发者的风格不通用,难以跨文件删除或屏蔽,使得给后期开发增加了不必要的麻烦。

而将 write 函数改为 size_t write(const char* msg, size_t len, const std::source_location location = std::source_location::current()); 则可以在 write 内部,以统一的方式进行日志的打印和,输出流的监控。提升了一定的开发效率。

知名的开源 log 库

最后,这里介绍一些知名的开源日志库,这些库大都比较成熟,大家可以直接使用:spdlog,glog,Boost Log,log4cxx,Poco Logger 等等。

相关推荐
jimy110 分钟前
c++隐式移动构造、强制拷贝省略、返回具名局部变量
开发语言·c++
离凌寒15 分钟前
一、关于st上制作外部烧录算法时软件识别不到算法文件的问题总结
算法
v_for_van24 分钟前
C语言__attribute__
服务器·c语言·开发语言·mcu·嵌入式·嵌入式实时数据库
工业一体机老司机1 小时前
Python实现工业一体机Modbus-TCP通信-从协议解析到多设备轮询实战
开发语言·python·tcp/ip
fpcc1 小时前
跟我学C++中级篇—static_assert和assert
开发语言·c++
2401_885885041 小时前
国际语音php接口代码示例:PHP使用cURL快速调用语音发送API
android·开发语言·前端·人工智能·python·php·语音识别
萌动的小火苗1 小时前
Linux进程线程面试题【无答案】
linux·运维·服务器·c语言·开发语言
青 春 记 忆1 小时前
LeetCode 283. 移动零|Python 解法详解
python·算法·leetcode
Zenova EdgeOS1 小时前
C++ 工业边缘 Boost.Asio 高级实战
开发语言·c++·边缘计算·工业网关
小小龙学IT1 小时前
C++ std::chrono 时间库深度解析:从 duration 模板到 C++20 日历与时区
linux·c++·c++20