为什么 Qt Creator 的应用程序输出不从 spdlog 记录器打印
Why Qt Creator's application output does not print from spdlog logger
我正在使用 spdlog 登录 Visual studio 项目。我在 Qt creator 中使用了相同的项目,然后 spdlog 日志记录不输出任何内容。但是 std::cout 仍然有效并打印到 Qt creator 的应用程序输出 window。
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。但是,我设法通过以下步骤输出到终端。
- 转到“项目”,然后为所选套件选择运行配置
- 在运行设置中,勾选"Run in terminal"选项
- 接下来,在Project pro文件中将控制台添加到CONFIG
- 清理项目
- 构建并 运行.
如果这些步骤没有帮助,您可以删除整个构建目录并重新运行这些步骤。
我遇到了同样的问题,唯一能让日志消息出现在应用程序输出选项卡中的方法是使用 msvc 记录器。
auto sink = std::make_shared<spdlog::sinks::msvc_sink_mt>();
auto logger = std::make_shared<spdlog::logger>("msvc_logger", sink);
此记录器的另一面是它不会打印到 console/terminal。
要使用同一个记录器写入应用程序输出和控制台,您可以像这样创建一个分布式接收器:
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");
我正在使用 spdlog 登录 Visual studio 项目。我在 Qt creator 中使用了相同的项目,然后 spdlog 日志记录不输出任何内容。但是 std::cout 仍然有效并打印到 Qt creator 的应用程序输出 window。
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。但是,我设法通过以下步骤输出到终端。
- 转到“项目”,然后为所选套件选择运行配置
- 在运行设置中,勾选"Run in terminal"选项
- 接下来,在Project pro文件中将控制台添加到CONFIG
- 清理项目
- 构建并 运行.
如果这些步骤没有帮助,您可以删除整个构建目录并重新运行这些步骤。
我遇到了同样的问题,唯一能让日志消息出现在应用程序输出选项卡中的方法是使用 msvc 记录器。
auto sink = std::make_shared<spdlog::sinks::msvc_sink_mt>();
auto logger = std::make_shared<spdlog::logger>("msvc_logger", sink);
此记录器的另一面是它不会打印到 console/terminal。
要使用同一个记录器写入应用程序输出和控制台,您可以像这样创建一个分布式接收器:
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");