我正在尝试为我的应用程序制作一个不在主线程中运行的记录器。我在 spdlog 周围使用了一个包装类 Logger。该类有一个类型的私有静态数据成员,该成员std::shared_ptr<spdlog::logger>
在 init() 函数中初始化。我能够成功创建一个spdlog::sinks::basic_file_sink_mt
但是当我尝试使用spd::async_factory
它时不会编译。
记录器.h
class Logger {
public:
static void init();
private:
static std::shared_ptr<spdlog:::logger> my_logger;
}
记录器.cpp
std::shared_ptr<spdlog::logger> Logger::my_logger;
void Logger::init() {
spdlog::sink_ptr my_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>("myfile.log", true);
my_logger = std::make_shared<spdlog::logger>("Application", my_sink);
}
这个解决方案似乎有效。它记录到文件中,但问题是它在主线程中。我尝试通过将行更改为如下方式将记录器更新为std::make_shared<spdlog::sinks::basic_file_sink_mt>
异步std::make_shared<spdlog::sinks::basic_file_sink_mt<spdlog::async_factory>>
:
void Logger::init() {
spdlog::sink_ptr my_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt<spdlog::async_factory>>("myfile.log", true);
my_logger = std::make_shared<spdlog::logger>("Application", my_sink);
}
当我尝试这个时,我得到编译错误。我该怎么做才能将我的成员变量设置为异步记录器?
感谢您阅读所有这些内容,并感谢您的帮助。