0

我正在尝试为我的应用程序制作一个不在主线程中运行的记录器。我在 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);
}

当我尝试这个时,我得到编译错误。我该怎么做才能将我的成员变量设置为异步记录器?

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

4

1 回答 1

0

尝试这个:

auto my_logger = spdlog::create_async<spdlog::sinks::basic_file_sink_mt>("async_file_logger", "myfile.log");  
于 2020-06-27T17:55:00.817 回答