Почему выходные данные приложения Qt Creator не печатаются из регистратора spdlog

У меня работает логирование в проекте Visual studio с использованием spdlog. Я использовал тот же проект в 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");

1

Решение

Да, выходные данные приложения не выводят spdlogs. Но мне удается вывести на терминал, выполнив следующие действия.

  1. Перейдите в Projects, затем выберите Run configuration для выбранного набора.
  2. В настройках запуска установите флажок «Запуск в терминале»
  3. Затем добавьте консоль в CONFIG в файле Project Pro.
  4. Очистить проект
  5. Сборка и запуск.

Если эти шаги не помогли, вы можете удалить весь каталог сборки и запустить шаги снова.

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");
0

По вопросам рекламы [email protected]