问题
由于spdlog是仅包含头文件的库,因此构建共享库并在主程序中使用它将不会在它们之间共享日志记录器注册表。这意味着对诸如spdlog::set_level(spdlog::level::level_enum::info)之类的函数的调用将不会更改DLL中的记录器。
解决方法
可以做的是在两个注册表中都注册记录器。
// mylibrary.h
// 在库中,我们跳过了符号导出部分
#include <memory>
#include <vector>
#include <spdlog/spdlog.h>
#include <spdlog/logger.h>
#include <spdlog/sinks/stdout_color_sinks.h>
namespace library
{
static const std::string logger_name = "example";
std::shared_ptr<spdlog::logger> setup_logger(std::vector<spdlog::sink_ptr> sinks)
{
auto logger = spdlog::get(logger_name);
if (!logger)
{
if (sinks.size() > 0)
{
logger = std::make_shared<spdlog::logger>(logger_