From 1a4788e2484bed7e06a4172e27704d8be52858ce Mon Sep 17 00:00:00 2001 From: "k.koide" Date: Tue, 4 Aug 2026 17:26:39 +0900 Subject: [PATCH] add self callback_sink --- .../src/glim/logger_hook_demo.cpp | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/modules/example/logger_hook_demo/src/glim/logger_hook_demo.cpp b/modules/example/logger_hook_demo/src/glim/logger_hook_demo.cpp index 3335693..5a9e61e 100644 --- a/modules/example/logger_hook_demo/src/glim/logger_hook_demo.cpp +++ b/modules/example/logger_hook_demo/src/glim/logger_hook_demo.cpp @@ -1,18 +1,35 @@ #include #include -#include #include #include namespace glim { +/// @brief Callback sink that calls a user-defined callback function for each log message. +/// @note This is identical to spdlog::sinks::callback_sink, just for backwards compatibility with older spdlog versions. +template +class callback_sink final : public spdlog::sinks::base_sink { +public: + using Callback = std::function; + explicit callback_sink(const Callback& callback) : callback_{callback} {} + +protected: + void sink_it_(const spdlog::details::log_msg& msg) override { callback_(msg); } + void flush_() override {} + +private: + Callback callback_; +}; + +using callback_sink_mt = callback_sink; + /// @brief A demo extension module that hooks into all loggers and prints log messages to the console. /// @note This module is assumed to be loaded after all other modules, so that it can hook into all loggers. class LoggerHookDemo : public ExtensionModule { public: LoggerHookDemo() : logger(create_module_logger("loghook")) { // Message callback sink to be added to all loggers - auto sink = std::make_shared([this](const auto& msg) { msg_callback(msg); }); + auto sink = std::make_shared([this](const auto& msg) { msg_callback(msg); }); // Add the callback sink to all existing loggers spdlog::apply_all([this, sink](std::shared_ptr logger) { @@ -37,8 +54,7 @@ class LoggerHookDemo : public ExtensionModule { } private: - // Logger - std::shared_ptr logger; + std::shared_ptr logger; // Logger }; } // namespace glim