Set default logger level
diff --git a/src/main/cpp/client/LogInterceptor.cpp b/src/main/cpp/client/LogInterceptor.cpp
index 3f58345..88d1417 100644
--- a/src/main/cpp/client/LogInterceptor.cpp
+++ b/src/main/cpp/client/LogInterceptor.cpp
@@ -11,6 +11,25 @@
 void LogInterceptor::Intercept(grpc::experimental::InterceptorBatchMethods* methods) {
   InterceptorContinuation continuation(methods);
 
+  auto level = spdlog::default_logger()->level();
+  switch (level) {
+    case spdlog::level::trace:
+      // fall-through on purpose.
+    case spdlog::level::debug: {
+      break;
+    }
+    case spdlog::level::info:
+      // fall-through on purpose.
+    case spdlog::level::warn:
+      // fall-through on purpose.
+    case spdlog::level::err: {
+      return;
+    }
+    default: {
+      return;
+    }
+  }
+
   if (methods->QueryInterceptionHookPoint(grpc::experimental::InterceptionHookPoints::PRE_SEND_INITIAL_METADATA)) {
     std::multimap<std::string, std::string>* metadata = methods->GetSendInitialMetadata();
     if (metadata) {
diff --git a/src/main/cpp/log/LoggerImpl.cpp b/src/main/cpp/log/LoggerImpl.cpp
index 20643f8..a8140f4 100644
--- a/src/main/cpp/log/LoggerImpl.cpp
+++ b/src/main/cpp/log/LoggerImpl.cpp
@@ -1,4 +1,6 @@
 #include "LoggerImpl.h"
+#include <algorithm>
+#include <cstdint>
 #include <cstdlib>
 #include <iostream>
 
@@ -77,7 +79,30 @@
   auto default_logger =
       std::make_shared<spdlog::logger>(LOGGER_NAME, spdlog::sinks_init_list{console_sink_, file_sink_});
   default_logger->flush_on(spdlog::level::warn);
-  default_logger->set_level(spdlog::level::trace);
+  Level logger_level =
+      static_cast<Level>(std::min(static_cast<std::uint8_t>(level_), static_cast<std::uint8_t>(console_level_)));
+  switch (logger_level) {
+    case Level::Trace: {
+      default_logger->set_level(spdlog::level::trace);
+      break;
+    }
+    case Level::Debug: {
+      default_logger->set_level(spdlog::level::debug);
+      break;
+    }
+    case Level::Info: {
+      default_logger->set_level(spdlog::level::info);
+      break;
+    }
+    case Level::Warn: {
+      default_logger->set_level(spdlog::level::warn);
+      break;
+    }
+    default: {
+      default_logger->set_level(spdlog::level::info);
+      break;
+    }
+  }
   spdlog::flush_every(std::chrono::seconds(1));
   spdlog::set_default_logger(default_logger);
 }