diff --git a/http/complete_response_fields.hpp b/http/complete_response_fields.hpp
index 1ac75ad..bec33fc 100644
--- a/http/complete_response_fields.hpp
+++ b/http/complete_response_fields.hpp
@@ -1,6 +1,7 @@
 #pragma once
 
 #include "authentication.hpp"
+#include "boost_formatters.hpp"
 #include "http_request.hpp"
 #include "http_response.hpp"
 #include "http_utility.hpp"
diff --git a/http/logging.hpp b/http/logging.hpp
index de14d99..9b1a36b 100644
--- a/http/logging.hpp
+++ b/http/logging.hpp
@@ -2,12 +2,6 @@
 
 #include "bmcweb_config.h"
 
-#include <boost/system/error_code.hpp>
-#include <boost/url/pct_string_view.hpp>
-#include <boost/url/string_view.hpp>
-#include <boost/url/url_view_base.hpp>
-#include <nlohmann/json.hpp>
-
 #include <bit>
 #include <format>
 #include <iostream>
@@ -15,64 +9,8 @@
 #include <string_view>
 #include <system_error>
 
-// Clang-tidy would rather these be static, but using static causes the template
-// specialization to not function.  Ignore the warning.
 // NOLINTBEGIN(readability-convert-member-functions-to-static, cert-dcl58-cpp)
 template <>
-struct std::formatter<boost::system::error_code>
-{
-    constexpr auto parse(std::format_parse_context& ctx)
-    {
-        return ctx.begin();
-    }
-
-    auto format(const boost::system::error_code& ec, auto& ctx) const
-    {
-        return std::format_to(ctx.out(), "{}", ec.what());
-    }
-};
-
-template <>
-struct std::formatter<boost::urls::pct_string_view>
-{
-    constexpr auto parse(std::format_parse_context& ctx)
-    {
-        return ctx.begin();
-    }
-    auto format(const boost::urls::pct_string_view& msg, auto& ctx) const
-    {
-        return std::format_to(ctx.out(), "{}",
-                              std::string_view(msg.data(), msg.size()));
-    }
-};
-
-template <std::derived_from<boost::urls::url_view_base> URL>
-struct std::formatter<URL>
-{
-    constexpr auto parse(std::format_parse_context& ctx)
-    {
-        return ctx.begin();
-    }
-    auto format(const URL& msg, auto& ctx) const
-    {
-        return std::format_to(ctx.out(), "{}", std::string_view(msg.buffer()));
-    }
-};
-
-template <>
-struct std::formatter<boost::core::string_view>
-{
-    constexpr auto parse(std::format_parse_context& ctx)
-    {
-        return ctx.begin();
-    }
-    auto format(const boost::core::string_view& msg, auto& ctx) const
-    {
-        return std::format_to(ctx.out(), "{}", std::string_view(msg));
-    }
-};
-
-template <>
 struct std::formatter<void*>
 {
     constexpr auto parse(std::format_parse_context& ctx)
@@ -85,35 +23,6 @@
                               std::to_string(std::bit_cast<size_t>(ptr)));
     }
 };
-
-template <>
-struct std::formatter<nlohmann::json::json_pointer>
-{
-    constexpr auto parse(std::format_parse_context& ctx)
-    {
-        return ctx.begin();
-    }
-    auto format(const nlohmann::json::json_pointer& ptr, auto& ctx) const
-    {
-        return std::format_to(ctx.out(), "{}", ptr.to_string());
-    }
-};
-
-template <>
-struct std::formatter<nlohmann::json>
-{
-    static constexpr auto parse(std::format_parse_context& ctx)
-    {
-        return ctx.begin();
-    }
-    auto format(const nlohmann::json& json, auto& ctx) const
-    {
-        return std::format_to(
-            ctx.out(), "{}",
-            json.dump(-1, ' ', false,
-                      nlohmann::json::error_handler_t::replace));
-    }
-};
 // NOLINTEND(readability-convert-member-functions-to-static, cert-dcl58-cpp)
 
 namespace crow
