gpt4 book ai didi

c++ - 带有 gtest 框架的 Spdlog 记录器不工作

转载 作者:行者123 更新时间:2023-11-30 05:03:49 26 4
gpt4 key购买 nike

我在我的库中使用 spdlog 和 gtest。我需要将一些日志(不是 gtest 日志)从测试执行保存到文件。下面是创建记录器的代码:

void createLogger() {
auto debug_logger = spdlog::rotating_logger_mt("debug_logger", "logs/test_debug", 1024 * 1024 * 25, 3);
debug_logger->set_level(spdlog::level::debug);
auto logger = spdlog::rotating_logger_mt("logger", "logs/test_info", 1024 * 1024 * 5, 2);
}

它在我的库的示例程序中运行良好。当我运行测试时,debug_logger 将所有内容保存在文件中,但 logger 不保存任何内容。当我删除

debug_logger->set_level(spdlog::level::debug);

debug_logger 也不工作。所以我认为这是记录器的问题但是当我添加

logger->set_level(spdlog::level::info);

还是不行。

这里是测试的主要部分:

int main(int argc, char **argv) {
try {
utility::createLogger();
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
} catch (const spdlog::spdlog_ex& ex) {
std::cout << "Log initialization failed: " << ex.what() << std::endl;
}
}

设置和测试用例之一:

class CPUTest: public ::testing::Test {

protected:

std::shared_ptr<spdlog::logger> logger;

void SetUp() {
spdlog::get("logger")->info("test get");
logger = spdlog::get("logger");
}
};

TEST_F(CPUTest, Resolve15) {
logger->info("Something from info logger");
// ...
}

debug_logger 级别 debug 也会保存 info 日志,但是 logger 级别为 debug不是。

你知道我的代码中测试和记录器初始化有什么问题吗?我应该在我的库中使用两个记录器还是一个包含两个文件?

最佳答案

由于我的测试执行时间很长,我正在终止进程。 debug 日志始终保存在两个文件中,info 日志则没有。这是由 spdlog 中的刷新策略引起的(debug 级别更重要,它经常被刷新 - 我想几乎在每次调用之后)。

info 日志在所有测试后刷新(不是在每个测试用例或每个测试类之后)。这就是为什么我的文件总是空的(我终止了进程)。

可以通过以下方式更改记录器的刷新策略

logger->flush_on(spdlog::level::info);

关于c++ - 带有 gtest 框架的 Spdlog 记录器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49258972/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com