
spdlog使用详细解析
详细介绍了spdlog使用的方方面面。
优惠券已抵扣
余额抵扣
还需支付
¥19.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
Knowledgebase
这个作者很懒,什么都没留下…
展开
-
16、spdlog使用---动态添加接收器
我们需要在日志中添加一个回调接收器,以便在保留原始日志记录的同时,将日志消息重新处理为不同的格式(例如 JSON 和 MQTT)。在这个过程中,我发现了一个由于不了解 C++ 标准而导致的小陷阱。要添加接收器时,必须注意如何访问 logger 中的 sinks()。” 会给你一个 sinks 向量的副本,因此你并没有修改 logger 中的 sinks 向量。C++ 编译器实际上是在按 C++ 标准操作,“auto var = xyz” 从来不会给你一个引用,而是调用 RHS 对象的复制构造函数。原创 2024-07-22 11:00:45 · 119 阅读 · 0 评论 -
17、spdlog使用--- 使用 spdlog 设置 JSON 日志
你必须自己确保日志消息中的内容是有效的 JSON,如果需要,你可以将它们做得尽可能复杂,包含完整的 JSON 对象。大多数 C++ 的 JSON 库都具有导出 std::string 的能力,可以解析为 JSON,然后传递给 spdlog 作为参数,或者你可以像这个示例一样使用纯文本消息。需要注意你在编译时启用的最小日志级别,如果你禁用了 “info” 级别,那么你需要使用更高的严重级别来设置初始 JSON 并在最后关闭它。当你完成日志记录时,你需要关闭 “log” 数组。原创 2024-07-22 10:59:53 · 556 阅读 · 0 评论 -
15、spdlog使用--- 通过Makefile使用spdlog
【代码】15、spdlog使用--- 通过Makefile使用spdlog。原创 2024-07-20 11:29:14 · 177 阅读 · 0 评论 -
14、spdlog使用---集成到 Eclipse IDE 中
) 注意:在很多情况下,建议选择一个名为 "ThirdParty" 或 "libs" 或任何其他能立即告诉我们这是一个包含第三方文件的文件夹的名称。我选择了一个名为 "ThirdParty" 的文件夹作为父文件夹...怎么在 Eclipse IDE 中集成 C++ spdlog 库呢。整个配置过程由 5 个简单步骤组成。我们将从项目页面下载的压缩包内容复制/解压到新创建或已存在的项目中。或者你可以从 GitHub 克隆它。中)并添加 spdlog 库头文件所在文件夹的路径。注意:当然,我们可以使用。原创 2024-07-20 11:25:23 · 104 阅读 · 0 评论 -
13、spdlog使用---如何在DLL中使用spdlog
由于spdlog是仅包含头文件的库,因此构建共享库并在主程序中使用它将不会在它们之间共享日志记录器注册表。这意味着对诸如spdlog::set_level(spdlog::level::level_enum::info)之类的函数的调用将不会更改DLL中的记录器。可以做的是在两个注册表中都注册记录器。原创 2023-08-31 16:48:37 · 994 阅读 · 0 评论 -
12、spdlog使用---spdlog的错误处理
如果在记录日志期间发生错误,该库将向stderr打印错误消息。为了避免屏幕被大量错误消息淹没,每个日志记录器的错误消息打印速率被限制为每分钟1条。在构造日志记录器或sink时可能会抛出异常,因为这被认为是致命的。自版本39cdd08开始,spdlog在记录日志时不会抛出异常。原创 2023-08-31 16:44:11 · 1432 阅读 · 0 评论 -
11、spdlog使用---spdlog默认日志记录器
为了方便起见,spdlog创建了一个默认的全局日志记录器(输出到stdout,带有颜色和多线程支持)。可以通过直接调用spdlog::info(..)、spdlog::debug(..)等来轻松使用它。原创 2023-08-31 16:42:11 · 932 阅读 · 0 评论 -
10、spdlog使用---spdlog cmake
使用CMake进行交叉编译在CMake 3.7版本中已经得到了支持,该版本包括了使用Android NDK和SDK配置工具链的本地支持(https://cmake.org/cmake/help/v3.7/manual/cmake-toolchains.7.html#cross-compiling-for-android)。> cmake -H. -B_builds -GXcode # 在OS X上使用Xcode生成器(多配置,不需要CMAKE_BUILD_TYPE)也可以使用CMake来安装这个库。原创 2023-08-31 16:40:03 · 6999 阅读 · 0 评论 -
9、spdlog使用---spdlog调整配置
为了从spdlog中挤出每一丝性能,可以编辑"tweakme.h"头文件。原创 2023-08-31 14:16:48 · 8028 阅读 · 0 评论 -
8、spdlog使用---spdlog刷新策略
注意:如果使用异步日志记录器,`logger->flush()` 会在队列中发布一个请求刷新操作的消息,因此该函数会立即返回。目前在关闭时不需要显式调用 `logger->flush()` 或 `spdlog::shutdown()`,在程序退出时会自动完成。然而,如果你希望在 "立即" 退出函数(如 `abort()` 或 `_exit(-1)`)之前手动刷新所有异步日志记录器,请在这些函数之前调用 `spdlog::shutdown()`。你可以设置会触发自动刷新的最低日志级别。原创 2023-08-31 14:12:40 · 9357 阅读 · 0 评论 -
7、spdlog使用---spdlog异步日志
在所有方式中,你都需要在代码中包含 `spdlog/async.h` 头文件:**使用``模板参数:**需要注意的是,这将放弃旧的全局线程池(tp),并创建一个新的tp - 这意味着使用旧tp的任何日志记录器都将停止工作,因此建议在创建任何异步日志记录器之前调用此函数。注意:上面示例中的 `tp` 对象必须在日志记录器对象之外存在,因为日志记录器会获取 `tp` 的 `weak_ptr`。**使用`spdlog::create_async`:**原创 2023-08-31 14:10:13 · 7639 阅读 · 0 评论 -
6、spdlog使用---spdlog的日志记录器注册表
如果尝试使用已经存在于注册表中的名称进行注册,spdlog 将抛出 `spdlog::spdlog_ex` 异常。如果找不到一个日志器,将返回一个空的 shared 指针。如果没有其他指向该日志器的 shared_ptr,那么日志器将被关闭,其所有资源将被释放。spdlog 维护一个全局的(每个进程的)已创建日志器的注册表。可以使用 `drop()` 函数将一个日志器从注册表中移除。通常情况下,不需要手动注册日志器,因为它们会自动为你注册。这将使用其名称注册 `some_logger`。原创 2023-08-31 14:04:59 · 6699 阅读 · 1 评论 -
5、spdlog使用---spdlog的sinks
要检索日志消息,请调用 spdlog::sinks::ringbuffer_sink::last_formatted(size_t)。在每次日志调用时(如果日志级别合适),logger 将在其中的每个 sink 上调用 "sink(log_msg)" 函数。qt_sink(Qt 汇报 sink):qt_sink 可以将日志消息输出到 QTextBrowser、QTextEdit 等 Qt 控件。在此之前,文件夹必须手动创建。将创建一个线程安全的 sink,它会在每天的 14:55 创建一个新的日志文件。原创 2023-08-31 14:00:15 · 6976 阅读 · 0 评论 -
4、spdlog使用---spdlog自定义日志格式
@ 源文件和行号 (使用 SPDLOG_TRACE(..)、SPDLOG_INFO(...) 等,而不是 spdlog::trace(...)) 与 %g:%# 相同 /some/dir/my_file.cpp:123。%g 源文件的完整或相对路径,与 __FILE__ 宏中的形式相同 (使用 SPDLOG_TRACE(..)、SPDLOG_INFO(...) 等) /some/dir/my_file.cpp。如果您需要使用类似 %s、%g、%#、%!原创 2023-08-31 10:39:42 · 8827 阅读 · 0 评论 -
3、spdlog使用---创建spdlog日志记录器
当尝试记录一条消息但队列已满时,调用者会阻塞(默认行为),直到有一个槽位可用(默认情况下),或立即用新消息覆盖队列中的最旧消息(如果日志记录器是以 async_overflow_policy==overrun_oldest 构建的)。使用 spdlog::get("...") 访问日志记录器 可以使用线程安全的 spdlog::get("logger_name") 从任何地方访问日志记录器,它会返回一个 shared pointer。每个日志记录器包含一个或多个 std::shared_ptr。原创 2023-08-31 10:31:10 · 8238 阅读 · 0 评论 -
2、spdlog使用---spdlog的线程安全
logger::sinks() - 返回非线程安全的向量引用,因此不要同时修改它(例如 logger->sinks().push_back(new_sink);非线程安全的 sinks:以 _st 结尾的 sinks(例如 daily_file_sink_st)线程安全的 sinks:以 _mt 结尾的 sinks(例如 daily_file_sink_mt)注意:此限制适用于所有类型的日志记录器("_mt" 或 "_st")。要创建线程安全的日志记录器,请使用 _mt 工厂函数。原创 2023-08-31 10:19:07 · 7874 阅读 · 0 评论 -
1、spdlog使用---spdlog新手入门
例如,如果您只需要旋转记录器,您需要包含 "spdlog/sinks/rotating_file_sink.h"。`spdlog` 是一个仅包含头文件的库。只需将文件复制到您的构建目录下,并使用 C++11 编译器即可。您可以在包含 "spdlog.h" 之前将 SPDLOG_ACTIVE_LEVEL 定义为所需的日志级别。需要注意的是,为了打印出调试或跟踪消息,还需要使用 spdlog::set_level。`spdlog` 采用了“包含所需内容”的方法 - 您的代码应该只包含实际需要的功能。原创 2023-08-31 10:13:44 · 9170 阅读 · 1 评论