问题标签 [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 每日记录器中的默认滚动时间?
使用spdlog,如何更改每日记录器的默认滚动时间?
在以下示例中,滚动仅在午夜发生:
c++ - 使用 spdlog 从库中记录
我正在尝试在涉及 windows 下的库的项目中使用spdlog。我创建了两个记录器。一个用于使用库的应用程序,一个用于库本身。库的记录器是从应用程序创建的,但是当库想要添加消息时,它会崩溃。
下面是一个简化的例子。
图书馆
libclass.h
库类.cpp
应用程序
主文件
c++ - 如何在同一个程序中多次启动和关闭spdlog?
我正在使用 spdlog 为 Visual Studio 中的托管和非托管代码运行日志。出于这个原因,我编写了在底层使用 spdlog 的 shell 类。
但是,我的单元测试遇到了问题。我的单元测试在单个可执行文件中运行,因此我需要多次停止并重新启动 spdlog 记录器和日志文件。
我该怎么做呢?我在一个类中使用这个代码来启动 Windows DLL 中的 spdlog 实例:
c++ - cmake 仅包含标头库
我想将spdlog包含到我的项目之一中。它是一个只有标题的库。我正在构建的项目正在使用 cmake。目前我正在使用
在 cmake 中并将库包括为
在 logger 文件夹内的 logs.h 中。我收到致命错误,没有这样的文件或目录。在我的应用程序中包含相同库的正确方法是什么。
pid - 如何使用 spdlog 记录 pid(进程 ID)
spdlog
可以通过以下方式登录threadid
:
spdlog::set_pattern("*** [%H:%M:%S %z] [thread %t] %v ***");
但是我怎样才能记录pid(process id)
?
c++ - 一个库中的函数与另一个库中的模板匹配
我正在开发一个使用两个不同库的 C++ 项目:spdlog用于日志记录,mutils-serialization用于将对象序列化为字节(用于通过网络发送)。这两个库都正确使用了命名空间,但是当我尝试编写一个同时使用它们的程序时,我的编译器(g++ 6.2)给了我一些荒谬的错误,似乎表明它正在尝试从 spdlog 库中实例化一个函数模板通过使用 mutils 库中的函数模板的定义。
这是我的简单测试程序:
TestSerializableObject
是一个实现mutils::ByteRepresentable
(启用序列化并引入 mutils-serialization 库的接口)的简单类,并提供一个operator<<
(spdlog 能够记录它所必需的)。如有必要,我可以发布它的代码。
当我用 编译它时g++ -std=c++14 -I"./src" -I"./libraries" -I"./libraries/mutils/" -L"./libraries/" -O0 -g3 -Wall "src/LibraryCollisionTest.cpp"
,我得到了这个又长又丑的错误(别担心,我会帮你解析它):
关键线在这里:
不知何故,g++ 已经从扩展 spdlog 库中的模板函数,在 namespacefmt::internal
中,跳跃到 mutils 库中的函数模板,在 namespace 中mutils
,这显然不是 spdlog 库打算做的!如果我查看第 1276 行format.h
,它就是在这个模板结构中调用“convert”函数的那个:
上面几行,果然是函数“convert”:
这些都在 namespace 之内fmt::internal
,我的 IDE 同意,如果我想要第 1276 行的函数“convert”的定义,我应该跳转到第 1248 行的函数“convert”。那么为什么 g++ 忽略这个定义,而是尝试使用 for 的定义mutils::convert()
,它甚至不在正确的命名空间中?
请注意,clang 也无法编译此程序,并且会犯同样的错误,所以我认为这不是 g++ 中的错误。
c++ - 使用 CMake 添加仅标头依赖项
我有一个简单的项目,它需要三个仅标头库才能编译:websocketpp、spdlog和nlohmann/json。
项目结构如下所示:
根 CMakeLists.txt 如下:
这个想法基本上是每个子目录都是一个库(例如core
),并且app
“聚合”了所有子目录。每个库(例如core
)都是这样构建的(core/CMakeLists.txt
):
请注意我如何链接依赖项(它们是仅标头库!)。这就是我获取它们的方式(vendor/install.cmake
):
到目前为止一切顺利:您可以看到依赖项是作为 git 子模块获取的,幸运的是,这使得管理它们变得更容易。但是,当我使用 编译我的项目时mkdir build && cd build && cmake ../src
,出现以下错误:
CMake 错误:安装(EXPORT FooCoreConfig ...)包括目标 foo-core,它需要不在导出集中的目标 websocketpp。
CMake 错误:安装(EXPORT FooCoreConfig ...)包括目标 foo-core,它需要不在导出集中的目标 spdlog。
包括标头,例如#include <spdlog/spdlog.h>
或#include <nlohmann/json.hpp>
产生错误,指出标头未找到。
说实话,我对 CMake 不太满意,过去两天我一直在调试它。这可能是非常简单的事情,但我不知道如何实现它。实际上,只需将 -I 作为编译器标志传递即可使用我想要的库,但 CMake 抽象似乎让我感到困惑。如果有人能解释为什么这不起作用,我会很高兴,并且希望将这些库包含到我的项目中的正确方法是什么。提前致谢!
c++ - C++ SPDLOG 编译错误:变量或字段 'set_error_handler' 声明为 void
我正在尝试在我的项目中使用 spdlog。根据 spdlog docu,我只需要复制包含文件夹下的文件并使用 C++ 11 编译器。
我将 /include/spdlog 文件夹复制到我的项目根文件夹,但在尝试构建项目后出现了很多错误。有些是ff:
我尝试在 CMakeLists.txt 中添加以下内容
(我安装了 libspdlog-dev)
但以上都不起作用。有谁知道我该如何解决这个问题?非常感谢!
c++ - 如何在代码中启用/禁用 spdlog 日志记录?
我正在我的应用程序中创建 c++ 库模块。要进行日志记录,我使用spdlog。但在生产环境中,我不希望我的 lib 模块进行任何日志记录。实现打开/关闭的一种方法是在我的代码中乱扔#ifdef 条件,例如...
我正在寻找一种避免编写这些条件的方法。可能是一个包装函数,它执行#ifdef 检查并编写它。但是这种方法的问题是我必须为每个日志记录方法编写包装器(例如 info、trace、warn、error ......)
有没有更好的办法?