Я чувствую себя как дурак, спрашивающий об этом, поскольку это примерно такой простой пример, как я могу себе представить, но он удерживает меня.
Я реализовал очень простой консольно-файловый регистратор:
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(); });
, но это, похоже, ничего не делает ...