diff --git a/lib/include/phosphor-logging/lg2/conversion.hpp b/lib/include/phosphor-logging/lg2/conversion.hpp
index fe0d7a1..5f6c298 100644
--- a/lib/include/phosphor-logging/lg2/conversion.hpp
+++ b/lib/include/phosphor-logging/lg2/conversion.hpp
@@ -254,7 +254,7 @@
     static void done(level l, const std::source_location& s, const char* m,
                      Ts&&... ts)
     {
-        do_log(l, s, m, sizeof...(Ts) / 3, std::forward<Ts>(ts)...);
+        do_log(l, s, m, std::forward<Ts>(ts)..., nullptr);
     }
 
     /** Apply the tuple from the end of 'step' into done.
diff --git a/lib/include/phosphor-logging/lg2/logger.hpp b/lib/include/phosphor-logging/lg2/logger.hpp
index 6dca12c..7459589 100644
--- a/lib/include/phosphor-logging/lg2/logger.hpp
+++ b/lib/include/phosphor-logging/lg2/logger.hpp
@@ -12,12 +12,13 @@
  *  This is a variadic argument function (std::va_list) where the variadic
  *  arguments are a set of 3: { header, flags, value }.
  *
+ *  The argument set is finalized with a 'nullptr' valued header.
+ *
  *  @param[in] level - The logging level to use.
  *  @param[in] source_location - The original source location of the upper-level
  *                               log call.
  *  @param[in] char* - The primary message to log.
- *  @param[in] size_t - The number of sets in the variadic arguments.
  */
-void do_log(level, const std::source_location&, const char*, size_t, ...);
+void do_log(level, const std::source_location&, const char*, ...);
 
 } // namespace lg2::details
diff --git a/lib/lg2_logger.cpp b/lib/lg2_logger.cpp
index ac7a75c..fd3921c 100644
--- a/lib/lg2_logger.cpp
+++ b/lib/lg2_logger.cpp
@@ -143,13 +143,11 @@
     isatty(fileno(stderr)) ? cerr_extra_output : noop_extra_output;
 
 // Do_log implementation.
-void do_log(level l, const std::source_location& s, const char* m, size_t count,
-            ...)
+void do_log(level l, const std::source_location& s, const char* m, ...)
 {
     using namespace std::string_literals;
 
-    const size_t entries = count + static_locs;
-    std::vector<std::string> strings{entries};
+    std::vector<std::string> strings{static_locs};
 
     std::string message{m};
 
@@ -162,11 +160,16 @@
 
     // Handle all the va_list args.
     std::va_list args;
-    va_start(args, count);
-    for (size_t i = static_locs; i < entries; ++i)
+    va_start(args, m);
+    while (true)
     {
         // Get the header out.
-        std::string h = va_arg(args, const char*);
+        auto h_ptr = va_arg(args, const char*);
+        if (h_ptr == nullptr)
+        {
+            break;
+        }
+        std::string h{h_ptr};
 
         // Get the format flag.
         auto f = va_arg(args, uint64_t);
@@ -204,7 +207,7 @@
         }
 
         // Create the field for this value.
-        strings[i] = h + '=' + value;
+        strings.emplace_back(h + '=' + value);
 
         // Check for {HEADER} in the message and replace with value.
         auto h_brace = '{' + h + '}';
@@ -225,7 +228,7 @@
     });
 
     // Output the iovec.
-    sd_journal_sendv(iov.data(), entries);
+    sd_journal_sendv(iov.data(), strings.size());
     extra_output_method(l, s, message);
 }
 
