spdlog:未能刷新/写入文件

mobile365bet365com 📅 2025-10-28 22:15:45 👤 admin 👁️ 9694 ❤️ 860
spdlog:未能刷新/写入文件

我觉得自己像个傻瓜,问这个问题,因为它是我能想到的最微不足道的例子,但它却在支撑着我。

我实现了一个非常基本的控制台和文件记录器:

代码语言:javascript运行复制 auto logger = spdlog::basic_logger_mt("console and file logger", filepath);

#ifdef NDEBUG

spdlog::set_level(spdlog::level::info); // Set global log level to info

#else

spdlog::set_level(spdlog::level::trace); // Set global log level to everything

#endif

spdlog::set_pattern("%^%l: %v%$"); // see https://github.com/gabime/spdlog/wiki/3.-Custom-formatting

spdlog::flush_on(spdlog::level::info);它在颜色上完美地写到控制台,但是尽管它创建了日志文件,但它从不向它写入。

我想尝试手动刷新它,但是没有spdlog::刷新。

我最初用两个接收器(一个控制台,一个文件)实现了这一点,并且有一个类似的问题:除非在这种情况下,它会向日志文件写入第一条(也是第一条)消息,只要它是错误的。

我很抱歉问了这么多的问题.

尝试1(来自多接收器示例):

代码语言:javascript运行复制 // Creating console logger --------------------

auto console_sink = std::make_shared();

// Creating file logger -----------------------

auto file_sink = std::make_shared(filepath);

// Creating multi-logger ----------------------

spdlog::logger logger("console and file", { console_sink, file_sink });

spdlog::flush_on(spdlog::level::info);结果:日志文件被创建,控制台日志记录很好,但是文件仍然是确定为空的。

尝试2(来自基本示例):

代码语言:javascript运行复制 // Creating the logger ------------------------

auto logger = spdlog::basic_logger_mt("console and $ME file", filepath);

spdlog::set_level(spdlog::level::trace); // Set global log level to everything

spdlog::flush_on(spdlog::level::info);结果:相同

只有当我将日志级别设置为" error“时,我才能进一步了解它,然后如果下一个日志是一个错误,它就会出现在文件中。文件中没有出现其他消息。

我也找不到手动冲洗。我试过使用这个例子:

代码语言:javascript运行复制spdlog::apply_all([&](std::shared_ptr l) {l->flush(); });但这看起来没什么用..。

相关推荐

【秋促】12款国产精品独立游戏推荐,逆天性价比,附带点评
方舟生存进化流星锁链怎么做 流星锁链制作材料代码
《尚气》电影简介 尚气情节介绍 尚气演员表→MAIGOO百科