问题标签 [spdlog]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2484 浏览

c++ - spdlog 错误:“不知道如何格式化类型,包括 fmt/ostream.h 如果它提供了应该使用的 operator<<”

我刚刚拿起 spdlog 以改进我们的日志记录。我们的日志记录非常基础,所以我只是几乎逐字复制“多接收器”示例以记录到文件和控制台。

但是,即使完全按照示例进行操作,我也会得到:

错误 C2338 不知道如何格式化类型,包括 fmt/ostream.h 如果它提供了应该使用的 operator<< Logger d:\tfs\development\bladed\main\external\spdlog\spdlog-1.x \include\spdlog\fmt\bundled\core.h 351

来自core.h:

我想这很容易解决,但我看不到它......

【Win32基本使用】

0 投票
1 回答
6067 浏览

c++ - spdlog:无法刷新/写入文件

问这个问题我觉得自己像个傻瓜,因为这是我能想到的微不足道的例子,但它阻止了我。

我已经实现了一个非常基本的控制台和文件记录器:

这会以颜色完美地写入控制台,但尽管它创建了日志文件,但它从不写入它。

我想尝试手动刷新它,但是没有 spdlog::flush。

我最初用两个接收器(一个控制台,一个文件)实现了这个,并且遇到了类似的问题:除非在这种情况下,它会将第一条(也是唯一一条)消息写入日志文件,只要它是一个错误。

我很抱歉问了这么一个点头的问题……

- - - - - - - - - - - - - - - 编辑 - - - - - - - - - - --------------------

尝试 1(来自多接收器示例):

结果:创建了日志文件,控制台日志记录很好,但文件仍然是空的。

尝试 2(来自基本示例):

结果:一样

唯一一次我似乎更进一步的是当我将日志级别设置为“错误”时,如果下一个日志是错误,它会出现在文件中。文件中没有其他消息。

我也一直找不到手动冲洗。我试过使用这个例子:

但这似乎没有任何作用......

0 投票
1 回答
604 浏览

c++ - spdlog 记录单个 wchar_t 字符串,其中包含包含 {...} 的数据

我正在将 spdlog 与注册表应用程序一起使用。尝试记录包含 CLSID 表示的单个 wchar_t 字符串时出现异常,例如“{0C092C21-882C-11CF-A6BB-080C7B2D682}”。我知道在 spdlog 中“{}”是一个格式化参数字符对,并且接受上面的数据应该抛出一个异常,但是我如何记录这些数据呢?

0 投票
1 回答
2127 浏览

c++ - Spdlog v1.3.1 异步记录器示例在 ubuntu 18.04 中出现错误

我已经从 git repo 手动安装了 spdlog,版本为 version.h 中的 1.3.1。现在我正在尝试执行存储库中给出的基本示例,但它们给出了某些错误。同步记录器示例运行良好。

我尝试了 2 个示例:使用 spdlog 的异步记录器创建和具有多个接收器的异步记录器

myAsyncLogger.cpp

编译为 :clang++ -o logAsync logAsync.cpp

给出以下错误:

我期待它应该可以正常工作,因为我正在使用 clang++ , c++11

0 投票
0 回答
3213 浏览

c++ - Spdlog 比 Boost Log 慢得多

我最近从 Boost Log 切换到 Spdlog 以获得所谓的速度优势。

但是,当我比较切换前后的运行时间时,我发现 Boost Log 明显更快。我想知道我是否对导致速度减慢的 spdlog 做错了什么,或者 Boost::Log 是否真的是更快的解决方案。

我的应用程序是单线程的,使用 -O3 和 -flto 编译,我使用的是 Boost 1.69.0 和 Spdlog 1.3.1。我的 Boost::Log 运行时间约为 37 秒,Spdlog 为 1m22s,Spdlog-async 为 2m22。我的日志条目通常是使用 nlohmann/json 库(我知道这不是最快的)用 json 制作的大约 80 个字符,并且我有 3 个不同的记录器,每个记录器都针对自己的文件。

升压设置:

在代码的其他地方,我声明了一个记录器


Spdlog 设置:

并使用:

任何意见,将不胜感激。

编辑

通过在创建任何异步记录器之前添加,我能够稍微提高性能 spdlog::init_thread_pool(1024*1024, 4);,但性能仍然是 Boost Log 的一半左右。

0 投票
1 回答
436 浏览

c++ - 为什么 spdlog/pthread 包含目录在 macos 上通过 CMake 中的 pkg_search_module 为空?

环境

它们都是最新版本。

CMakeLists.txt

CMakeLists.txt 是:

错误

消息显示:

<spdlog/spdlog.h>找不到头文件。显然 spdlog 头目录不包含在 cmake 中。

问题

为什么 pkg_search_module 适用于icu4c,错误不适用于spdlog?而不是为了pthread

0 投票
1 回答
1151 浏览

c++ - 为什么 msvc 找不到“spdlog/spdlog.h”标头?

代码库:https ://github.com/fastype/fastype

该项目使用build.batVisual Studio 2017 在 Windows 10 上进行初始化。它将克隆 github 存储库并构建第三方依赖项,然后通过 cmake 创建 Visual Studio sln 项目文件。

所有 cmake 配置似乎都是正确的,但不适用于 spdlog 标头。

错误消息是:

0 投票
0 回答
571 浏览

c++ - 如何将定义的 ostream 从 3rd 方库重定向到 spdlog 记录器?

我已经通过 spdlog 库更改了我的一个应用程序中的消息记录和打印输出。一切都在我控制的代码中运行。我面临的问题是我无法从 3rd 方库重定向打印输出和其他错误消息。

在库中,std::cout 和 std::cerr 被重定向到名为 errorOut 或 printOut 的中间 std::ostream,它们在库中全局定义为 asextern std::ostream printOut;并实现为std::ostream library::printOut(std::cout.rdbuf());

我试图将重定向的流更改为 std::ostringstream : std::ostringstream ss; library::printOut.rdbuf(ss.rdbuf());。然后,我将它用于 spdlog 的接收器,auto sink2 = std::make_shared<spdlog::sinks::ostream_sink_mt> (ss);并将其组合到组合记录器中。

但是这样做,来自库的错误消息不会像往常一样在 cout/cerr 中打印出来。

因此,如何在不修改这些库的情况下将定义的 ostream 从库重定向/捕获到 spdlog?

感谢您的帮助和投入。

0 投票
1 回答
1290 浏览

c++ - Spdlog 不添加到文件中

我想在另一个文件中配置记录器,但是当我这样做时,记录器不会向该文件添加任何内容。为什么?为简单起见,我从库文档(函数体)中获得了以下示例。

*.cpp

*.hpp

我对以下事实更感兴趣:

这是工作。但是......当我将文件保存在 data_manager 中时(只需添加一个到std::vector<FilePtr>),它就会停止工作))

(所有这些仅适用于我在另一个 * .cpp 而不是 main.cpp 中配置它的情况,并且始终创建该文件)

0 投票
2 回答
1076 浏览

c++ - 如何转义 spdlog 消息?

我正在使用 spdlog 记录所有消息。我的日志模式是 JSON 格式。我在所有日志调用中手动转义消息。有没有办法在 spdlog 层自动转义消息?

手动转义示例:

它应该在 spdlog 层内自动处理: