diff --git a/include/libcamera/base/log.h b/include/libcamera/base/log.h
index 6d2c93019..4137d87a4 100644
--- a/include/libcamera/base/log.h
+++ b/include/libcamera/base/log.h
@@ -7,6 +7,7 @@
 
 #pragma once
 
+#include <atomic>
 #include <sstream>
 
 #include <libcamera/base/private.h>
@@ -31,8 +32,8 @@ public:
 	static LogCategory *create(const char *name);
 
 	const std::string &name() const { return name_; }
-	LogSeverity severity() const { return severity_; }
-	void setSeverity(LogSeverity severity);
+	LogSeverity severity() const { return severity_.load(std::memory_order_relaxed); }
+	void setSeverity(LogSeverity severity) { severity_.store(severity, std::memory_order_relaxed); }
 
 	static const LogCategory &defaultCategory();
 
@@ -40,7 +41,9 @@ private:
 	explicit LogCategory(const char *name);
 
 	const std::string name_;
-	LogSeverity severity_;
+
+	std::atomic<LogSeverity> severity_;
+	static_assert(decltype(severity_)::is_always_lock_free);
 };
 
 #define LOG_DECLARE_CATEGORY(name)					\
diff --git a/src/libcamera/base/log.cpp b/src/libcamera/base/log.cpp
index a43ed9684..ce3f04547 100644
--- a/src/libcamera/base/log.cpp
+++ b/src/libcamera/base/log.cpp
@@ -810,15 +810,12 @@ LogCategory::LogCategory(const char *name)
  */
 
 /**
+ * \fn LogCategory::setSeverity(LogSeverity severity)
  * \brief Set the severity of the log category
  *
  * Messages of severity higher than or equal to the severity of the log category
  * are printed, other messages are discarded.
  */
-void LogCategory::setSeverity(LogSeverity severity)
-{
-	severity_ = severity;
-}
 
 /**
  * \brief Retrieve the default log category
