summaryrefslogtreecommitdiff
path: root/src/third_party/wiredtiger/ext/storage_sources/s3_store/s3_log_system.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/third_party/wiredtiger/ext/storage_sources/s3_store/s3_log_system.cpp')
-rw-r--r--src/third_party/wiredtiger/ext/storage_sources/s3_store/s3_log_system.cpp67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/third_party/wiredtiger/ext/storage_sources/s3_store/s3_log_system.cpp b/src/third_party/wiredtiger/ext/storage_sources/s3_store/s3_log_system.cpp
new file mode 100644
index 00000000000..4835adabbf5
--- /dev/null
+++ b/src/third_party/wiredtiger/ext/storage_sources/s3_store/s3_log_system.cpp
@@ -0,0 +1,67 @@
+#include <aws/core/Aws.h>
+#include "s3_log_system.h"
+#include <cstdarg>
+
+S3LogSystem::S3LogSystem(WT_EXTENSION_API *wtApi, uint32_t wtVerbosityLevel)
+{
+ // If the verbosity level is out of range it will default to AWS SDK Error level.
+ if (verbosityMapping.find(wtVerbosityLevel) != verbosityMapping.end()) {
+ awsLogLevel = verbosityMapping.at(wtVerbosityLevel);
+ } else {
+ awsLogLevel = Aws::Utils::Logging::LogLevel::Error;
+ }
+ this->wtApi = wtApi;
+ this->wtVerbosityLevel = wtVerbosityLevel;
+}
+
+void
+S3LogSystem::Log(Aws::Utils::Logging::LogLevel logLevel, const char *tag, const char *format, ...)
+{
+ std::stringstream ss;
+ std::va_list args;
+ va_list tmpArgs;
+ va_start(args, format);
+ char *outputBuff = nullptr;
+ int requiredLength;
+
+#ifdef _WIN32
+ requiredLength = _vscprintf(formatStr, tmpArgs) + 1;
+ outputBuff = (char *)malloc(requiredLength);
+ vsnprintf_s(outputBuff, requiredLength, _TRUNCATE, formatStr, args);
+#else
+ requiredLength = vsnprintf(nullptr, 0, format, tmpArgs) + 1;
+ outputBuff = (char *)malloc(requiredLength);
+ vsnprintf(outputBuff, requiredLength, format, args);
+#endif
+ va_end(tmpArgs);
+ ss << outputBuff << std::endl;
+ free(outputBuff);
+ LogAwsMessage(tag, ss.str());
+ va_end(args);
+}
+
+void
+S3LogSystem::LogStream(
+ Aws::Utils::Logging::LogLevel logLevel, const char *tag, const Aws::OStringStream &messageStream)
+{
+ LogAwsMessage(tag, messageStream.rdbuf()->str().c_str());
+}
+
+void
+S3LogSystem::LogAwsMessage(const char *tag, const std::string &message) const
+{
+ wtApi->err_printf(wtApi, NULL, "%s : %s", tag, message.c_str());
+}
+
+void
+S3LogSystem::LogVerboseMessage(int32_t verbosityLevel, const std::string &message)
+{
+ if (verbosityLevel <= wtVerbosityLevel)
+ wtApi->err_printf(wtApi, NULL, "%s", message.c_str());
+}
+
+void
+S3LogSystem::Flush()
+{
+ return;
+}