diff --git a/src/webserver_cli.cpp b/src/webserver_cli.cpp
new file mode 100644
index 0000000..e17d800
--- /dev/null
+++ b/src/webserver_cli.cpp
@@ -0,0 +1,56 @@
+#include "boost_formatters.hpp"
+#include "logging.hpp"
+
+#include <CLI/CLI.hpp>
+#include <boost/asio/io_context.hpp>
+#include <sdbusplus/asio/connection.hpp>
+#include <sdbusplus/bus.hpp>
+
+#include <string>
+
+// Override default log option:
+static void cliLogLevel(const std::string& logLevel)
+{
+    crow::getBmcwebCurrentLoggingLevel() = crow::getLogLevelFromName(logLevel);
+}
+
+int main(int argc, char** argv) noexcept(false)
+{
+    CLI::App app("BMCWeb SetLogLevel CLI");
+
+    cliLogLevel("INFO");
+
+    // Define sdbus interfaces:
+    std::string service = "xyz.openbmc_project.bmcweb";
+    std::string path = "/xyz/openbmc_project/bmcweb";
+    std::string iface = "xyz.openbmc_project.bmcweb";
+    std::string method = "SetLogLevel";
+
+    std::string loglevel;
+    app.add_option("-l,--loglevel", loglevel, "Set bmcweb log level");
+
+    CLI11_PARSE(app, argc, argv)
+
+    BMCWEB_LOG_INFO("Working on log-level: {}", loglevel);
+
+    // Set up dbus connection:
+    boost::asio::io_context io;
+    auto conn = std::make_shared<sdbusplus::asio::connection>(io);
+
+    // Attempt to async_call to set logging level
+    conn->async_method_call(
+        [&io](boost::system::error_code& ec) mutable {
+        if (ec)
+        {
+            BMCWEB_LOG_ERROR("SetLogLevel returned error with {}", ec);
+            return;
+        }
+        BMCWEB_LOG_INFO("Successfully changed log-level ");
+        io.stop();
+    },
+        service, path, iface, method, loglevel);
+
+    io.run();
+
+    return 0;
+}
diff --git a/src/webserver_run.cpp b/src/webserver_run.cpp
index 5013669..9079ad6 100644
--- a/src/webserver_run.cpp
+++ b/src/webserver_run.cpp
@@ -23,16 +23,41 @@
 
 #include <boost/asio/io_context.hpp>
 #include <sdbusplus/asio/connection.hpp>
+#include <sdbusplus/asio/object_server.hpp>
 
 #include <memory>
 
+static void setLogLevel(const std::string& logLevel)
+{
+    const std::basic_string_view<char>* iter =
+        std::ranges::find(crow::mapLogLevelFromName, logLevel);
+    if (iter == crow::mapLogLevelFromName.end())
+    {
+        BMCWEB_LOG_ERROR("log-level {} not found", logLevel);
+        return;
+    }
+    crow::getBmcwebCurrentLoggingLevel() = crow::getLogLevelFromName(logLevel);
+    BMCWEB_LOG_INFO("Requested log-level change to: {}", logLevel);
+}
+
 int run()
 {
     auto io = std::make_shared<boost::asio::io_context>();
     App app(io);
 
-    sdbusplus::asio::connection systemBus(*io);
-    crow::connections::systemBus = &systemBus;
+    std::shared_ptr<sdbusplus::asio::connection> systemBus =
+        std::make_shared<sdbusplus::asio::connection>(*io);
+    crow::connections::systemBus = systemBus.get();
+
+    auto server = sdbusplus::asio::object_server(systemBus);
+
+    std::shared_ptr<sdbusplus::asio::dbus_interface> iface =
+        server.add_interface("/xyz/openbmc_project/bmcweb",
+                             "xyz.openbmc_project.bmcweb");
+
+    iface->register_method("SetLogLevel", setLogLevel);
+
+    iface->initialize();
 
     // Static assets need to be initialized before Authorization, because auth
     // needs to build the whitelist from the static routes
@@ -106,6 +131,9 @@
     bmcweb::registerUserRemovedSignal();
 
     app.run();
+
+    systemBus->request_name("xyz.openbmc_project.bmcweb");
+
     io->run();
 
     crow::connections::systemBus = nullptr;
