创建 Spdlog 异步文件记录器时遇到困难



我正在尝试为我的应用程序制作一个不在主线程中运行的记录器。我正在使用一个包装类,记录器,围绕spdlog。该类有一个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);
}

当我尝试这样做时,我收到编译错误。如何操作才能将成员变量设置为异步记录器?

感谢您阅读所有这些内容,并感谢您的帮助。

试试这个:

auto my_logger = spdlog::create_async<spdlog::sinks::basic_file_sink_mt>("async_file_logger", "myfile.log");  

最新更新