为什么Qt Creator的应用程序输出无法从spdlog记录器打印

时间:2018-09-12 11:56:20

标签: c++ qt spdlog

我在使用spdlog的Visual Studio项目中正在记录日志。我在Qt Creator中使用了相同的项目,则spdlog日志记录不输出任何内容。但是std :: cout仍然可以工作并打印到Qt创建者的应用程序输出窗口。

std::vector<spdlog::sink_ptr> sinks;
sinks.push_back(std::make_shared<spdlog::sinks::stdout_color_sink_mt>());
sinks.push_back(std::make_shared<spdlog::sinks::basic_file_sink_mt>("multisink.txt", true));
auto appLogger = std::make_shared<spdlog::logger>("appLogger", begin(sinks), end(sinks));
appLogger->set_level(spdlog::level::debug);
spdlog::register_logger(appLogger);
spdlog::flush_on(spdlog::level::debug);    
appLogger->warn("this should appear in both console and file");

2 个答案:

答案 0 :(得分:1)

是的,应用程序输出不输出spdlog。但是,我设法按照以下步骤输出到终端。

  1. 转到项目,然后为选定的工具包选择运行配置
  2. 在运行设置中,选中“在终端中运行”选项
  3. 接下来,将控制台添加到Project pro文件中的CONFIG中
  4. 清理项目
  5. 构建并运行。

如果这些步骤没有帮助,则可以删除整个构建目录,然后再次运行这些步骤。

答案 1 :(得分:1)

我遇到了同样的问题,唯一使日志消息显示在应用程序输出选项卡中的方法是使用msvc记录器。

auto sink   = std::make_shared<spdlog::sinks::msvc_sink_mt>();
auto logger = std::make_shared<spdlog::logger>("msvc_logger", sink);

此记录器的另一面是它无法打印到控制台/终端。

要使用同一记录器同时写入应用程序输出和控制台,您可以创建一个分布式接收器,如下所示:

auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
auto msvc_sink    = std::make_shared<spdlog::sinks::msvc_sink_mt>();
auto dist_sink    = std::make_shared<spdlog::sinks::dist_sink_st>();
dist_sink->add_sink(msvc_sink);
dist_sink->add_sink(console_sink);
auto logger = std::make_shared<spdlog::logger>("multi_sink", dist_sink)
logger->info("testing multiple sinks");