diff --git a/src/Lib/Log.hh b/src/Lib/Log.hh
index b40bac3aaddc8b4b5c13ae729cd0456c709d9f3c..805f857b2420e6f293312b00a1d3b28eaa8e7e9f 100644
--- a/src/Lib/Log.hh
+++ b/src/Lib/Log.hh
@@ -2,7 +2,10 @@
 
 #include "Utils.hh"
 
-#define VIVY_GET_LOGGER(sink, cat)      std::make_shared<Logger>(sink.get(), cat)
+// Create a logger with a category
+#define VIVY_GET_LOGGER(sink, cat) std::make_shared<Logger>(sink.get(), cat)
+
+// Log something in a logger
 #define VIVY_LOG_WITH_LEVEL(log, level) log->logEvent(__FILE__, __func__, __LINE__, level)
 #define VIVY_LOG_WARN(log)              VIVY_LOG_WITH_LEVEL(log, LogLevel::Warning)
 #define VIVY_LOG_DEBUG(log)             VIVY_LOG_WITH_LEVEL(log, LogLevel::Debug)
@@ -10,13 +13,21 @@
 #define VIVY_LOG_ERR(log)               VIVY_LOG_WITH_LEVEL(log, LogLevel::Error)
 #define VIVY_LOG_FATAL(log)             VIVY_LOG_WITH_LEVEL(log, LogLevel::Critical)
 
+// Declare a sink, with the utility function/method `flushLogSink`. This is
+// intended to be used in an object to not polluate namespaces.
 #define VIVY_DCL_LOG_SINK(sink)                          \
     std::shared_ptr<LogSink> sink{ LogSink::newSink() }; \
     void flushLogSink() const noexcept { sink->flush(); }
 
+// Declare a dispatch for a sink with no arguments in the constructor.
 #define VIVY_DCL_LOG_DISPATCH(sink, name, dispatch) \
     std::shared_ptr<dispatch> name{ sink->newDispatcher<dispatch>() };
 
+// Declare a dispatch for a sink with arguments in the constructor.
+#define VIVY_DCL_LOG_DISPATCH_WITH(sink, name, dispatch, ...) \
+    std::shared_ptr<dispatch> name{ sink->newDispatcher<dispatch>(__VA_ARGS__) };
+
+// Install logger for the object.
 #define VIVY_LOGGABLE_OBJECT(sink, name, logger)                             \
     std::shared_ptr<Logger> logger{ VIVY_GET_LOGGER(sink, name) };           \
     LogMessage logFatal() const noexcept { return VIVY_LOG_FATAL(logger); }  \
@@ -90,10 +101,11 @@ public:
     void recieveLogMessage(const Logger *const, LogMessage &&) noexcept;
     void flush() noexcept;
 
-    template <Derived<LogSinkDispatcher> DispatcherType>
-    std::shared_ptr<DispatcherType> newDispatcher() noexcept
+    template <Derived<LogSinkDispatcher> DispatcherType, typename... Args>
+    std::shared_ptr<DispatcherType> newDispatcher(Args &&...args) noexcept
     {
-        std::shared_ptr<DispatcherType> dispatch = std::make_shared<DispatcherType>();
+        std::shared_ptr<DispatcherType> dispatch =
+            std::make_shared<DispatcherType>(std::forward<Args>(args)...);
         registerLogDispatcher(dispatch);
         return dispatch;
     }