У меня работает логирование в проекте 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");
Да, выходные данные приложения не выводят spdlogs. Но мне удается вывести на терминал, выполнив следующие действия.
Если эти шаги не помогли, вы можете удалить весь каталог сборки и запустить шаги снова.
У меня была та же проблема, и единственным способом, которым я мог заставить сообщения журнала появляться на вкладке вывода приложения, было использование регистратора 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");