簡體   English   中英

為什么Qt Creator的應用程序輸出無法從spdlog記錄器打印

[英]Why Qt Creator's application output does not print from spdlog logger

我在使用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");

是的,應用程序輸出不輸出spdlog。 但是,我設法通過以下步驟輸出到終端。

  1. 轉到項目,然后為選定的工具包選擇運行配置
  2. 在運行設置中,選中“在終端中運行”選項
  3. 接下來,將控制台添加到Project pro文件中的CONFIG
  4. 清理項目
  5. 生成並運行。

如果這些步驟沒有幫助,則可以刪除整個構建目錄,然后再次運行這些步驟。

我遇到了同樣的問題,唯一可以使日志消息顯示在應用程序輸出選項卡中的方法是使用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");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM