From 65b29a1b703de95405f83cccb1e3be2ea414be03 Mon Sep 17 00:00:00 2001 From: Jeff Becker Date: Sat, 25 Sep 2021 12:54:43 -0400 Subject: [PATCH] add liblokinet custom logger --- include/lokinet/lokinet_misc.h | 6 ++++++ llarp/lokinet_shared.cpp | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/include/lokinet/lokinet_misc.h b/include/lokinet/lokinet_misc.h index fa20911e4..b09b20e2c 100644 --- a/include/lokinet/lokinet_misc.h +++ b/include/lokinet/lokinet_misc.h @@ -21,6 +21,12 @@ extern "C" int EXPORT lokinet_log_level(const char*); + typedef void (*lokinet_logger_func)(const char*, void*); + + /// set a custom logger function + void EXPORT + lokinet_set_logger(lokinet_logger_func func, void* user); + /// @brief take in hex and turn it into base32z /// @return value must be free()'d later char* EXPORT diff --git a/llarp/lokinet_shared.cpp b/llarp/lokinet_shared.cpp index 592b7e967..6e793b915 100644 --- a/llarp/lokinet_shared.cpp +++ b/llarp/lokinet_shared.cpp @@ -22,6 +22,33 @@ namespace { + struct Logger : public llarp::ILogStream + { + lokinet_logger_func func; + void* user; + + explicit Logger(lokinet_logger_func _func, void* _user) : func{_func}, user{_user} + {} + + void + PreLog(std::stringstream&, llarp::LogLevel, const char*, int, const std::string&) const override + {} + + void + Print(llarp::LogLevel, const char*, const std::string& msg) override + { + func(msg.c_str(), user); + } + + void + PostLog(std::stringstream&) const override{}; + + void + ImmediateFlush() override{}; + + void Tick(llarp_time_t) override{}; + }; + struct Context : public llarp::Context { using llarp::Context::Context; @@ -1028,4 +1055,10 @@ extern "C" } return EINVAL; } + + void EXPORT + lokinet_set_logger(lokinet_logger_func func, void* user) + { + llarp::LogContext::Instance().logStream.reset(new Logger{func, user}); + } }