diff --git a/loader/include/Geode/loader/Log.hpp b/loader/include/Geode/loader/Log.hpp
index 38c88627..11ae26e8 100644
--- a/loader/include/Geode/loader/Log.hpp
+++ b/loader/include/Geode/loader/Log.hpp
@@ -141,7 +141,10 @@ namespace geode {
             Mod* getSender() const;
             Severity getSeverity() const;
 
+            [[deprecated("Will be removed in next version")]]
             void addFormat(std::string_view formatStr, std::span<ComponentTrait*> comps);
+
+            Result<> addFormatNew(std::string_view formatStr, std::span<ComponentTrait*> comps);
         };
 
         class GEODE_DLL Logger {
@@ -172,7 +175,12 @@ namespace geode {
             Log l(m, sev);
 
             std::array<ComponentTrait*, sizeof...(Args)> comps = { static_cast<ComponentTrait*>(new ComponentBase(args))... };
-            l.addFormat(formatStr, comps);
+            auto res = l.addFormatNew(formatStr, comps);
+
+            if (res.isErr()) {
+                internalLog(Severity::Warning, getMod(), "Error parsing log format \"{}\": {}", formatStr, res.unwrapErr());
+                return;
+            }
 
             Logger::push(std::move(l));
         }
diff --git a/loader/src/loader/Log.cpp b/loader/src/loader/Log.cpp
index 61f4f3cb..afe0b196 100644
--- a/loader/src/loader/Log.cpp
+++ b/loader/src/loader/Log.cpp
@@ -132,13 +132,20 @@ Severity Log::getSeverity() const {
 }
 
 void Log::addFormat(std::string_view formatStr, std::span<ComponentTrait*> components) {
+    auto res = this->addFormatNew(formatStr, components);
+    if (res.isErr()) {
+        throw std::runtime_error(res.unwrapErr());
+    }
+}
 
+Result<> Log::addFormatNew(std::string_view formatStr, std::span<ComponentTrait*> components) {
     size_t compIndex = 0;
     std::string current;
     for (size_t i = 0; i < formatStr.size(); ++i) {
         if (formatStr[i] == '{') {
-            if (i == formatStr.size() - 1)
-                throw std::runtime_error("Unescaped { at the end of format string");
+            if (i == formatStr.size() - 1) {
+                return Err("Unescaped { at the end of format string");
+            }
             auto const next = formatStr[i + 1];
             if (next == '{') {
                 current.push_back('{');
@@ -146,8 +153,9 @@ void Log::addFormat(std::string_view formatStr, std::span<ComponentTrait*> compo
                 continue;
             }
             if (next == '}') {
-                if (compIndex >= components.size())
-                    throw std::runtime_error("Not enough arguments for format string");
+                if (compIndex >= components.size()) {
+                    return Err("Not enough arguments for format string");
+                }
                 
                 m_components.push_back(new ComponentBase(current));
                 m_components.push_back(components[compIndex++]);
@@ -156,17 +164,18 @@ void Log::addFormat(std::string_view formatStr, std::span<ComponentTrait*> compo
                 ++i;
                 continue;
             }
-            throw std::runtime_error("You put something in between {} silly head");
+            return Err("You put something in between {} silly head");
         }
         if (formatStr[i] == '}') {
-            if (i == formatStr.size() - 1)
-                throw std::runtime_error("Unescaped } at the end of format string");
+            if (i == formatStr.size() - 1) {
+                return Err("Unescaped } at the end of format string");
+            }
             if (formatStr[i + 1] == '}') {
                 current.push_back('}');
                 ++i;
                 continue;
             }
-            throw std::runtime_error("You have an unescaped }");
+            return Err("You have an unescaped }");
         }
 
         current.push_back(formatStr[i]);
@@ -176,9 +185,10 @@ void Log::addFormat(std::string_view formatStr, std::span<ComponentTrait*> compo
         m_components.push_back(new ComponentBase(current));
 
     if (compIndex != components.size()) {
-        throw std::runtime_error("You have left over arguments.. silly head");
-        // show_silly_error(formatStr);
+        return Err("You have left over arguments.. silly head");
     }
+
+    return Ok();
 }
 
 // Logger