diff --git a/server/server.go b/server/server.go
index 4dfeb36a54da1ebf8e6a8d77bf113406759dc396..776939e7f153f7ae1e3285aaa612eb354626e1b5 100644
--- a/server/server.go
+++ b/server/server.go
@@ -468,8 +468,8 @@ func (s *Server) startGarbageCollection(ctx context.Context, frequency time.Dura
 			case <-time.After(frequency):
 				if r, err := s.storage.GarbageCollect(now()); err != nil {
 					s.logger.Errorf("garbage collection failed: %v", err)
-				} else if r.AuthRequests > 0 || r.AuthCodes > 0 {
-					s.logger.Infof("garbage collection run, delete auth requests=%d, auth codes=%d, device requests =%d, device tokens=%d",
+				} else if !r.IsEmpty() {
+					s.logger.Infof("garbage collection run, delete auth requests=%d, auth codes=%d, device requests=%d, device tokens=%d",
 						r.AuthRequests, r.AuthCodes, r.DeviceRequests, r.DeviceTokens)
 				}
 			}
diff --git a/storage/storage.go b/storage/storage.go
index 06f718e10fd828e89a19c7565c3fbd1d1410be4a..3a57d52232a0edad5690024a0a24cc48a1727b1a 100644
--- a/storage/storage.go
+++ b/storage/storage.go
@@ -55,6 +55,14 @@ type GCResult struct {
 	DeviceTokens   int64
 }
 
+// IsEmpty returns whether the garbage collection result is empty or not.
+func (g *GCResult) IsEmpty() bool {
+	return g.AuthRequests == 0 &&
+		g.AuthCodes == 0 &&
+		g.DeviceRequests == 0 &&
+		g.DeviceTokens == 0
+}
+
 // Storage is the storage interface used by the server. Implementations are
 // required to be able to perform atomic compare-and-swap updates and either
 // support timezones or standardize on UTC.