diff --git a/include/libcamera/base/log.h b/include/libcamera/base/log.h
index 958cb488d..1a14b8dbc 100644
--- a/include/libcamera/base/log.h
+++ b/include/libcamera/base/log.h
@@ -108,10 +108,15 @@ LogMessage _log(const LogCategory &category, LogSeverity severity,
 #ifndef __DOXYGEN__
 #define _LOG_CATEGORY(name) logCategory##name

+#define _LOG(cat, sev) \
+	switch (const auto &_logCategory = (cat); int(_logCategory.severity() <= Log##sev)) \
+	case 1: \
+		_log(_logCategory, Log##sev).stream()
+
 #define _LOG1(severity) \
-	_log(LogCategory::defaultCategory(), Log##severity).stream()
+	_LOG(LogCategory::defaultCategory(), severity)
 #define _LOG2(category, severity) \
-	_log(_LOG_CATEGORY(category)(), Log##severity).stream()
+	_LOG(_LOG_CATEGORY(category)(), severity)

 /*
  * Expand the LOG() macro to _LOG1() or _LOG2() based on the number of
