diff --git a/package/android/src/main/cpp/AndroidLogger.cpp b/package/android/src/main/cpp/AndroidLogger.cpp index bd953b00..e4c6a28e 100644 --- a/package/android/src/main/cpp/AndroidLogger.cpp +++ b/package/android/src/main/cpp/AndroidLogger.cpp @@ -8,9 +8,9 @@ #include "MmkvLogger.h" #include -void MmkvLogger::log(const std::string& tag, const std::string& message) { +void MmkvLogger::log(const std::string& tag, const std::string& formatString, Args... args) { #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wformat-security" - __android_log_print(ANDROID_LOG_INFO, tag.c_str(), message.c_str()); + __android_log_print(ANDROID_LOG_INFO, tag.c_str(), formatString.c_str(), args); #pragma clang diagnostic pop } diff --git a/package/cpp/MmkvLogger.h b/package/cpp/MmkvLogger.h index 2a524bae..dea2ce71 100644 --- a/package/cpp/MmkvLogger.h +++ b/package/cpp/MmkvLogger.h @@ -11,25 +11,14 @@ class MmkvLogger { private: MmkvLogger() = delete; -private: - template - static std::string string_format(const std::string& format, Args... args) { - int size_s = std::snprintf(nullptr, 0, format.c_str(), args...) + 1; // Extra space for '\0' - if (size_s <= 0) { - throw std::runtime_error("Failed to format string!"); - } - auto size = static_cast(size_s); - std::unique_ptr buf(new char[size]); - std::snprintf(buf.get(), size, format.c_str(), args...); - return std::string(buf.get(), buf.get() + size - 1); // We don't want the '\0' inside - } public: - static void log(const std::string& tag, const std::string& message); + static void log(const std::string& tag, const std::string& formatString, Args... args); template inline static void log(const std::string& tag, const std::string& formatString, Args&&... args) { - std::string formattedString = string_format(formatString, std::forward(args)...); - log(tag, formattedString); +#ifdef DEBUG + log(tag, formatString, std::forward(args)...); +#endif } }; diff --git a/package/ios/AppleLogger.mm b/package/ios/AppleLogger.mm index 80aee610..a9a2c99b 100644 --- a/package/ios/AppleLogger.mm +++ b/package/ios/AppleLogger.mm @@ -8,9 +8,11 @@ #import "MmkvLogger.h" #import -void MmkvLogger::log(const std::string& tag, const std::string& message) { +void MmkvLogger::log(const std::string& tag, const std::string& formatString, Args... args) { #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wformat-security" - NSLog(@"[%s]: %s", tag.c_str(), message.c_str()); +#ifdef DEBUG + NSLog(@"[%s]: " + formatString.c_str(), tag.c_str(), args); +#endif #pragma clang diagnostic pop }