From d81f0e8e971fb1c1cb13b9309ff96e0efd8bc52d Mon Sep 17 00:00:00 2001 From: Matt Aber Date: Wed, 22 May 2024 21:01:02 -0400 Subject: [PATCH] Add support for android sinks Change-Id: I9e261a54f5ed69a647bae3cb759495fff807858a --- src/KDSpdSetup/details.cpp | 10 ++++++++++ src/KDSpdSetup/details.h | 18 ++++++++++++++++++ src/KDSpdSetup/setup.cpp | 10 +++++++++- 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/KDSpdSetup/details.cpp b/src/KDSpdSetup/details.cpp index 64a4b58..7493d36 100644 --- a/src/KDSpdSetup/details.cpp +++ b/src/KDSpdSetup/details.cpp @@ -214,6 +214,16 @@ auto genFromWinStr(toml::string &&typeStr) -> spdlog::sink_ptr return nullptr; } +#elif __ANDROID__ +auto genFromAndroidStr(toml::string &&typeStr, toml::string &&tag, bool const useRawMsg) -> spdlog::sink_ptr +{ + if (typeStr == "android_sink_st") { + return createAndroidSinkStPtr(std::move(tag), useRawMsg); + } + if (typeStr == "android_sink_mt") { + return createAndroidSinkMtPtr(std::move(tag), useRawMsg); + } +} #endif } // namespace KDSPDSetup::details diff --git a/src/KDSpdSetup/details.h b/src/KDSpdSetup/details.h index eb7b800..6239aa4 100644 --- a/src/KDSpdSetup/details.h +++ b/src/KDSpdSetup/details.h @@ -27,6 +27,8 @@ #include #elif _WIN32 #include +#elif __ANDROID__ +#include #endif #include @@ -93,6 +95,8 @@ static auto const linuxStrs{ std::vector{ "syslog_sink_st", "syslog */ static auto const winStrs{ std::vector{ "msvc_sink_st", "msvc_sink_mt" } }; +static auto const androidStrs{ std::vector{ "android_sink_st", "android_sink_mt" } }; + /** * @brief A simple map associating strings of `spdlog::level::level_enum` names to the enums themselves. * Used to pass an enum to `spdlog::logger::set_level` given a string read from a TOML table. @@ -310,6 +314,11 @@ class SPDMaps * */ #define createMsvcSinkMtPtr createMsvcSinkPtr + +#elif __ANDROID__ +#define createAndroidSinkStPtr createAndroidSinkPtr + +#define createAndroidSinkMtPtr createAndroidSinkPtr #endif /** @@ -572,6 +581,13 @@ auto createMsvcSinkPtr() -> std::shared_ptr> { return std::make_shared>(); } + +#elif __ANDROID__ +template +auto createAndroidSinkPtr(std::string const &&tag, bool const useRawMessage) -> std::shared_ptr> +{ + return std::make_shared>(tag, useRawMessage); +} #endif /** @@ -649,6 +665,8 @@ auto genFromLinuxStr(toml::string &&typeStr, toml::table &&sinkTable) -> spdlog: */ auto genFromWinStr(toml::string &&typeStr) -> spdlog::sink_ptr; +#elif __ANDROID__ +auto genFromAndroidStr(toml::string &&typeStr, toml::string &&tag, bool const useRawMsg) -> spdlog::sink_ptr; #endif } // namespace KDSPDSetup::details diff --git a/src/KDSpdSetup/setup.cpp b/src/KDSpdSetup/setup.cpp index 605c2b2..eb51647 100644 --- a/src/KDSpdSetup/setup.cpp +++ b/src/KDSpdSetup/setup.cpp @@ -48,7 +48,7 @@ void setupSink(toml::table &&sinkTable) auto typeStr = sinkTable.at("type").as_string(); bool ok = false; - for (auto &typeList : { details::fileStrs, details::rotateStrs, details::dailyStrs, details::nullStrs, details::stdStrs, details::linuxStrs, details::winStrs }) { + for (auto &typeList : { details::fileStrs, details::rotateStrs, details::dailyStrs, details::nullStrs, details::stdStrs, details::linuxStrs, details::winStrs, details::androidStrs }) { if (details::inTypelist(typeStr, typeList)) { ok = true; break; @@ -83,6 +83,14 @@ void setupSink(toml::table &&sinkTable) sinkPtr = details::genFromWinStr(std::move(typeStr)); #else return; +#endif + } else if (details::inTypelist(typeStr, details::androidStrs)) { +#ifdef __ANDROID__ + auto tag = (sinkTable.contains("tag")) ? sinkTable.at("tag").as_string() : "spdlog"; + auto const useRawMsg = (sinkTable.contains("use_raw_msg")) ? sinkTable.at("use_raw_msg").as_boolean() : false; + sinkPtr = details::genFromAndroidStr(std::move(typeStr), std::move(tag), useRawMsg); +#else + return; #endif }