问题标签 [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.
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基本使用】
c++ - spdlog:无法刷新/写入文件
问这个问题我觉得自己像个傻瓜,因为这是我能想到的微不足道的例子,但它阻止了我。
我已经实现了一个非常基本的控制台和文件记录器:
这会以颜色完美地写入控制台,但尽管它创建了日志文件,但它从不写入它。
我想尝试手动刷新它,但是没有 spdlog::flush。
我最初用两个接收器(一个控制台,一个文件)实现了这个,并且遇到了类似的问题:除非在这种情况下,它会将第一条(也是唯一一条)消息写入日志文件,只要它是一个错误。
我很抱歉问了这么一个点头的问题……
- - - - - - - - - - - - - - - 编辑 - - - - - - - - - - --------------------
尝试 1(来自多接收器示例):
结果:创建了日志文件,控制台日志记录很好,但文件仍然是空的。
尝试 2(来自基本示例):
结果:一样
唯一一次我似乎更进一步的是当我将日志级别设置为“错误”时,如果下一个日志是错误,它会出现在文件中。文件中没有其他消息。
我也一直找不到手动冲洗。我试过使用这个例子:
但这似乎没有任何作用......
c++ - spdlog 记录单个 wchar_t 字符串,其中包含包含 {...} 的数据
我正在将 spdlog 与注册表应用程序一起使用。尝试记录包含 CLSID 表示的单个 wchar_t 字符串时出现异常,例如“{0C092C21-882C-11CF-A6BB-080C7B2D682}”。我知道在 spdlog 中“{}”是一个格式化参数字符对,并且接受上面的数据应该抛出一个异常,但是我如何记录这些数据呢?
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
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 的一半左右。
c++ - 为什么 spdlog/pthread 包含目录在 macos 上通过 CMake 中的 pkg_search_module 为空?
环境
- 操作系统:macos
- 包管理器:自制
- 构建工具:cmake、pkg-config、clang
- 存储库:https ://github.com/xedit/xedit
它们都是最新版本。
CMakeLists.txt
CMakeLists.txt 是:
错误
消息显示:
<spdlog/spdlog.h>
找不到头文件。显然 spdlog 头目录不包含在 cmake 中。
问题
为什么 pkg_search_module 适用于icu4c
,错误不适用于spdlog
?而不是为了pthread
?
c++ - 为什么 msvc 找不到“spdlog/spdlog.h”标头?
代码库:https ://github.com/fastype/fastype
该项目使用build.bat
Visual Studio 2017 在 Windows 10 上进行初始化。它将克隆 github 存储库并构建第三方依赖项,然后通过 cmake 创建 Visual Studio sln 项目文件。
所有 cmake 配置似乎都是正确的,但不适用于 spdlog 标头。
错误消息是:
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?
感谢您的帮助和投入。
c++ - Spdlog 不添加到文件中
我想在另一个文件中配置记录器,但是当我这样做时,记录器不会向该文件添加任何内容。为什么?为简单起见,我从库文档(函数体)中获得了以下示例。
*.cpp
*.hpp
我对以下事实更感兴趣:
这是工作。但是......当我将文件保存在 data_manager 中时(只需添加一个到std::vector<FilePtr>
),它就会停止工作))
(所有这些仅适用于我在另一个 * .cpp 而不是 main.cpp 中配置它的情况,并且始终创建该文件)
c++ - 如何转义 spdlog 消息?
我正在使用 spdlog 记录所有消息。我的日志模式是 JSON 格式。我在所有日志调用中手动转义消息。有没有办法在 spdlog 层自动转义消息?
手动转义示例:
它应该在 spdlog 层内自动处理: