diff --git a/test/log.cpp b/test/log/log_api.cpp
similarity index 100%
rename from test/log.cpp
rename to test/log/log_api.cpp
diff --git a/test/log_process.cpp b/test/log/log_process.cpp
similarity index 100%
rename from test/log_process.cpp
rename to test/log/log_process.cpp
diff --git a/test/log/meson.build b/test/log/meson.build
new file mode 100644
index 0000000..95f6c1a
--- /dev/null
+++ b/test/log/meson.build
@@ -0,0 +1,13 @@
+log_test = [
+    ['log_api',     'log_api.cpp'],
+    ['log_process', 'log_process.cpp'],
+]
+
+foreach t : log_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 658f283..b2f809e 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('process')
@@ -22,8 +23,6 @@ public_tests = [
 
 internal_tests = [
     ['camera-sensor',                   'camera-sensor.cpp'],
-    ['log',                             'log.cpp'],
-    ['log_process',                     'log_process.cpp'],
     ['message',                         'message.cpp'],
     ['signal-threads',                  'signal-threads.cpp'],
     ['threads',                         'threads.cpp'],
