c++ - spdlog:无法刷新/写入文件

标签 c++ spdlog

我觉得问这个问题就像个傻瓜,因为这是我能想到的最微不足道的例子,但它阻碍了我。

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

    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::flush。

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

我很抱歉问了这么一个无聊的问题......

---------------------------- 编辑---------------- ------------------------

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

    // Creating console logger --------------------
    auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();

    // Creating file logger -----------------------
    auto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>(filepath);

    // Creating multi-logger ----------------------
    spdlog::logger logger("console and file", { console_sink, file_sink });
    spdlog::flush_on(spdlog::level::info);

结果:日志文件已创建,控制台日志记录很好,但文件仍然是空的。

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

    // 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);

结果:一样

唯一一次我似乎有更进一步的是当我将日志级别设置为“错误”时,然后如果下一个日志是错误的,它会出现在文件中。文件中没有其他消息出现。

我也一直找不到手动冲洗。我试过使用示例:

spdlog::apply_all([&](std::shared_ptr<spdlog::logger> l) {l->flush(); });

但这似乎没有做任何事情......

最佳答案

好的,在逐行检查 spdlog 代码后,我找到了意外行为的来源。

我一直在用

spdlog::error(message);

和相关函数来进行日志记录,因为这些不需要创建任何单例或任何东西。

查看代码,这些函数总是使用默认记录器,方法spdlog:register_logger 没有设置默认记录器(我不知道它做了什么)。

如果您改用以下代码:

spdlog::set_default_logger(logger);

它似乎工作正常。

关于c++ - spdlog:无法刷新/写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53446647/

相关文章:

c++ if语句导致无限循环

c++ - 将小数存储为单个 float 时的预期错误是什么?

c++ - 如何解决对自己的C++成员函数的 undefined reference ?

c++ - 我在 C++ 中收到的每个错误都有 4 个相同的无用错误

c++ - 如何在代码中启用/禁用 spdlog 日志记录?

c++ - 无法在spdlog中格式化参数

c++ - 将批处理脚本作为 Windows 服务运行

c++ - 从 C++ 通过 activex 读取 Outlook 地址簿随机返回未知错误