diff --git a/test/log/log_api.cpp b/test/log/log_api.cpp
new file mode 100644
index 0000000..395b857
--- /dev/null
+++ b/test/log/log_api.cpp
@@ -0,0 +1,75 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * Copyright (C) 2019, Google Inc.
+ *
+ * log_api.cpp - log API test
+ */
+
+#include <algorithm>
+#include <fcntl.h>
+#include <iostream>
+#include <stdio.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include <libcamera/logging.h>
+
+#include "log.h"
+#include "test.h"
+
+using namespace std;
+using namespace libcamera;
+
+LOG_DEFINE_CATEGORY(LogAPITest)
+
+class LogAPITest : public Test
+{
+protected:
+	int run() override
+	{
+		int fd = open("/tmp", O_TMPFILE | O_RDWR, S_IRUSR | S_IWUSR);
+		if (fd < 0) {
+			cerr << "Failed to open tmp log file" << endl;
+			return TestFail;
+		}
+
+		char path[PATH_MAX];
+		snprintf(path, PATH_MAX, "/proc/self/fd/%d", fd);
+
+		logSetFile(path);
+
+		logSetLevel("LogAPITest", "DEBUG");
+		LOG(LogAPITest, Info) << "asdf";
+
+		logSetLevel("LogAPITest", "WARN");
+		LOG(LogAPITest, Info) << "asdf";
+
+		logSetLevel("LogAPITest", "WARN");
+		LOG(LogAPITest, Info) << "asdf";
+		LOG(LogAPITest, Debug) << "asdf";
+
+		logSetLevel("LogAPITest", "ERROR");
+		LOG(LogAPITest, Error) << "asdf";
+		LOG(LogAPITest, Info) << "asdf";
+
+		logSetLevel("LogAPITest", "WARN");
+		LOG(LogAPITest, Warning) << "asdf";
+		LOG(LogAPITest, Info) << "asdf";
+
+		char buf[200];
+		lseek(fd, 0, SEEK_SET);
+		read(fd, buf, 1000);
+		close(fd);
+
+		std::string s(buf);
+		int n = count(s.begin(), s.end(), '\n');
+		if (n == 3)
+			return TestPass;
+
+		return TestFail;
+	}
+};
+
+TEST_REGISTER(LogAPITest)
diff --git a/test/log/meson.build b/test/log/meson.build
new file mode 100644
index 0000000..35ea553
--- /dev/null
+++ b/test/log/meson.build
@@ -0,0 +1,12 @@
+log_api_test = [
+    ['log_api', 'log_api.cpp'],
+]
+
+foreach t : log_api_test
+    exe = executable(t[0], t[1],
+                     dependencies : libcamera_dep,
+                     link_with : test_libraries,
+                     include_directories : test_includes_internal)
+
+    test(t[0], exe, suite : 'log')
+endforeach
diff --git a/test/meson.build b/test/meson.build
index 60ce960..44d8495 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -4,6 +4,7 @@ subdir('camera')
 subdir('controls')
 subdir('ipa')
 subdir('ipc')
+subdir('log')
 subdir('media_device')
 subdir('pipeline')
 subdir('stream')
