diff --git a/changelog.d/5557.misc b/changelog.d/5557.misc
new file mode 100644
index 0000000000000000000000000000000000000000..0c90f498719f36441d1574a35462275da743026e
--- /dev/null
+++ b/changelog.d/5557.misc
@@ -0,0 +1 @@
+Logging when running GC collection on generation 0 is now at the DEBUG level, not INFO.
diff --git a/synapse/metrics/__init__.py b/synapse/metrics/__init__.py
index 1f30179b5169359101c7c27f84b43ff985d2ffeb..eaf0aaa86e898cccf31e9ce092827bcaee96bc52 100644
--- a/synapse/metrics/__init__.py
+++ b/synapse/metrics/__init__.py
@@ -437,7 +437,10 @@ def runUntilCurrentTimer(func):
         counts = gc.get_count()
         for i in (2, 1, 0):
             if threshold[i] < counts[i]:
-                logger.info("Collecting gc %d", i)
+                if i == 0:
+                    logger.debug("Collecting gc %d", i)
+                else:
+                    logger.info("Collecting gc %d", i)
 
                 start = time.time()
                 unreachable = gc.collect(i)