spdlog旋转/基本文件注销在pybind11模块中工作



我正试图用spdlog在pybind11模块中记录一些东西。

我添加了一个静态变量log_initializer,它的构造函数将初始化spdlog。

这是示例代码:


#include <pybind11/pybind11.h>
PYBIND11_MODULE(my_module, m) {
// def my module here
}
#include <fmt/format.h>
#include <spdlog/spdlog.h>
#include <spdlog/sinks/rotating_file_sink.h>

const int MAX_ROTATE_SIZE = 50 * 1024 * 1024;
const int MAX_ROTATE_FILES = 10;
const spdlog::level::level_enum LOG_LEVEL = spdlog::level::info;
struct ModuleInitializer {
ModuleInitializer() {
init_logger();
}
static void init_logger() {
auto rotate_logger = spdlog::rotating_logger_mt(
"my_module", "my_module.log", MAX_ROTATE_SIZE, MAX_ROTATE_FILES);
spdlog::set_default_logger(rotate_logger);
spdlog::set_level(LOG_LEVEL);
spdlog::set_pattern("%Y-%m-%d %H:%M%S.%f | %l | p-%P t-%t | %!:%@ - %v");
SPDLOG_DEBUG("logging initialized");
}
};
static ModuleInitializer module_initializer;

当我在python3控制台中使用python-so模块(由pybind11创建(时,日志文件是由spdlog创建的,而不是实际写入日志文件的任何内容。

你能帮帮我吗?

然后我尝试在pybind11模块中打开一个文件,并在其中写入一些内容

并且该FILE *fp = fopen("my_module.log", "w"); fwrite("hello world!n", 1, 13, fp); fclose(fp);将成功写入。

我不明白spdlog的哪一部分错了,为什么它不起作用。

说出来,为什么没有写入日志文件的问题是因为spdlog中的日志级别配置,而不是因为pybind11/python模块。