diff --git a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/AbstractHealthCheck.java b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/AbstractHealthCheck.java
index e65d269..ba6d75a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/AbstractHealthCheck.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/AbstractHealthCheck.java
@@ -14,6 +14,7 @@
 
 package com.googlesource.gerrit.plugins.healthcheck.check;
 
+import com.google.common.flogger.FluentLogger;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListeningExecutorService;
 import com.google.gerrit.metrics.Counter0;
@@ -25,11 +26,9 @@
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public abstract class AbstractHealthCheck implements HealthCheck {
-  private static final Logger log = LoggerFactory.getLogger(AbstractHealthCheck.class);
+  private static final FluentLogger logger = FluentLogger.forEnclosingClass();
   private final long timeout;
   private final String name;
   private final ListeningExecutorService executor;
@@ -72,7 +71,7 @@
               try {
                 healthy = enabled ? doCheck() : Result.DISABLED;
               } catch (Exception e) {
-                log.warn("Check {} failed", name, e);
+                logger.atWarning().withCause(e).log("Check %s failed", name);
                 healthy = Result.FAILED;
               }
               Long elapsed = System.currentTimeMillis() - ts;
@@ -106,7 +105,7 @@
       ListenableFuture<StatusSummary> future, long ts, Exception e, String message, Result result) {
     future.cancel(true);
     Long elapsed = System.currentTimeMillis() - ts;
-    log.warn(message, e);
+    logger.atWarning().withCause(e).log("%s", message);
     StatusSummary checkStatusSummary =
         new StatusSummary(result, ts, elapsed, Collections.emptyMap());
     failureCounterMetric.increment();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/AuthHealthCheck.java b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/AuthHealthCheck.java
index 2dc22dc..ffb7d16 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/AuthHealthCheck.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/AuthHealthCheck.java
@@ -16,6 +16,7 @@
 
 import static com.googlesource.gerrit.plugins.healthcheck.check.HealthCheckNames.AUTH;
 
+import com.google.common.flogger.FluentLogger;
 import com.google.common.util.concurrent.ListeningExecutorService;
 import com.google.gerrit.metrics.MetricMaker;
 import com.google.gerrit.server.account.AccountCache;
@@ -26,12 +27,10 @@
 import com.google.inject.Singleton;
 import com.googlesource.gerrit.plugins.healthcheck.HealthCheckConfig;
 import java.util.Optional;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 @Singleton
 public class AuthHealthCheck extends AbstractHealthCheck {
-  private static final Logger log = LoggerFactory.getLogger(AuthHealthCheck.class);
+  private static final FluentLogger logger = FluentLogger.forEnclosingClass();
   private final Realm realm;
   private final AccountCache byIdCache;
   private final String username;
@@ -63,11 +62,11 @@
 
     Optional<AccountState> accountState = byIdCache.getByUsername(username);
     if (!accountState.isPresent()) {
-      log.error("Cannot load account state for username " + username);
+      logger.atSevere().log("Cannot load account state for username %s", username);
       return Result.FAILED;
     }
     if (!accountState.get().account().isActive()) {
-      log.error("Authentication error, account " + username + " is inactive");
+      logger.atSevere().log("Authentication error, account %s  is inactive", username);
       return Result.FAILED;
     }
     return Result.PASSED;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/BlockedThreadsConfigurator.java b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/BlockedThreadsConfigurator.java
index 40030e1..8bfe53c 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/BlockedThreadsConfigurator.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/BlockedThreadsConfigurator.java
@@ -19,6 +19,7 @@
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.ImmutableSet;
+import com.google.common.flogger.FluentLogger;
 import com.google.inject.Inject;
 import com.googlesource.gerrit.plugins.healthcheck.HealthCheckConfig;
 import com.googlesource.gerrit.plugins.healthcheck.check.BlockedThreadsCheck.Collector;
@@ -32,12 +33,11 @@
 import java.util.Optional;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import java.util.stream.Collectors;
 
 @VisibleForTesting
 public class BlockedThreadsConfigurator {
-  private static final Logger log = LoggerFactory.getLogger(BlockedThreadsConfigurator.class);
+  private static final FluentLogger logger = FluentLogger.forEnclosingClass();
   private static final Pattern THRESHOLD_PATTERN = Pattern.compile("^(\\d\\d?)$");
 
   static final int DEFAULT_BLOCKED_THREADS_THRESHOLD = 50;
@@ -89,10 +89,10 @@
     // check configuration consistency
     if (specsClassified.size() > 1) {
       Collection<Threshold> specs = deduplicatePrefixes(specsClassified.get(true));
-      log.warn(
+      logger.atWarning().log(
           "Global and specific thresholds were configured for blocked threads check. Specific"
-              + " configuration is used {}.",
-          specs);
+              + " configuration is used %s.",
+          specs.stream().map(Threshold::toString).collect(Collectors.joining(", ")));
       return specs;
     }
 
@@ -103,8 +103,8 @@
           : deduplicateGlobal(entry.getValue());
     }
 
-    log.info(
-        "Default blocked threads check is configured with {}% threshold",
+    logger.atInfo().log(
+        "Default blocked threads check is configured with %d%% threshold",
         DEFAULT_BLOCKED_THREADS_THRESHOLD);
     return ImmutableSet.of(new Threshold(DEFAULT_BLOCKED_THREADS_THRESHOLD));
   }
@@ -112,7 +112,7 @@
   private static Collection<Threshold> deduplicateGlobal(List<Threshold> input) {
     if (input.size() > 1) {
       Threshold spec = input.get(input.size() - 1);
-      log.warn("Multiple threshold values were configured. Using {}", spec);
+      logger.atWarning().log("Multiple threshold values were configured. Using %s", spec);
       return ImmutableSet.of(spec);
     }
     return input;
@@ -122,10 +122,12 @@
     Map<String, Threshold> deduplicated = new HashMap<>();
     input.forEach(t -> deduplicated.put(t.prefix.get(), t));
     if (deduplicated.size() != input.size()) {
-      log.warn(
+      logger.atWarning().log(
           "The same prefixes were configured multiple times. The following configuration is used"
-              + " {}",
-          deduplicated.values());
+              + " %s",
+          deduplicated.values().stream()
+              .map(Threshold::toString)
+              .collect(Collectors.joining(", ")));
     }
     return deduplicated.values();
   }
@@ -144,7 +146,7 @@
       }
     }
 
-    log.warn("Invalid configuration of blocked threads threshold [{}]", spec);
+    logger.atWarning().log("Invalid configuration of blocked threads threshold [%s]", spec);
     return Optional.empty();
   }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/ChangesIndexHealthCheck.java b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/ChangesIndexHealthCheck.java
index 324ec70..ab281f9 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/ChangesIndexHealthCheck.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/ChangesIndexHealthCheck.java
@@ -16,6 +16,7 @@
 
 import static com.googlesource.gerrit.plugins.healthcheck.check.HealthCheckNames.CHANGES_INDEX;
 
+import com.google.common.flogger.FluentLogger;
 import com.google.common.util.concurrent.ListeningExecutorService;
 import com.google.gerrit.index.IndexType;
 import com.google.gerrit.metrics.MetricMaker;
@@ -34,12 +35,10 @@
 import org.eclipse.jgit.lib.Config;
 import org.eclipse.jgit.storage.file.FileBasedConfig;
 import org.eclipse.jgit.util.FS;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 @Singleton
 public class ChangesIndexHealthCheck extends AbstractHealthCheck implements OnlineUpgradeListener {
-  private static final Logger log = LoggerFactory.getLogger(QueryChangesHealthCheck.class);
+  private static final FluentLogger logger = FluentLogger.forEnclosingClass();
   private static final String lockFilename = "write.lock";
 
   private final SitePaths sitePaths;
@@ -82,13 +81,13 @@
         Optional.of(
             getChangesLockFiles(sitePaths.index_dir, String.format("changes_%04d", newVersion)));
     if (!changes.compareAndSet(changes.get(), newLockFiles)) {
-      log.info(
-          "New version {} of changes index healthcheck lock files was set already by another"
+      logger.atInfo().log(
+          "New version %d of changes index healthcheck lock files was set already by another"
               + " thread",
           newVersion);
     } else {
-      log.info(
-          "Changes index healthcheck switched from index version {} to {}", oldVersion, newVersion);
+      logger.atInfo().log(
+          "Changes index healthcheck switched from index version %d to %d", oldVersion, newVersion);
     }
   }
 
@@ -99,8 +98,8 @@
     IndexType indexType = new IndexType(cfg.getString("index", null, "type"));
     boolean isLucene = indexType.isLucene();
     if (!isLucene) {
-      log.warn(
-          "Configured index type [{}] is not supported for index health check therefore it is"
+      logger.atWarning().log(
+          "Configured index type [%s] is not supported for index health check therefore it is"
               + " disabled.",
           indexType);
     }
@@ -119,7 +118,7 @@
       return getActiveIndexVersion(cfg, "changes")
           .map(version -> getChangesLockFiles(indexDir, version));
     } catch (IOException | ConfigInvalidException e) {
-      log.error("Getting changes index version from configuration failed", e);
+      logger.atSevere().withCause(e).log("Getting changes index version from configuration failed");
     }
     return Optional.empty();
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/ProjectsListHealthCheck.java b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/ProjectsListHealthCheck.java
index d448cf4..6a4f166 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/ProjectsListHealthCheck.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/ProjectsListHealthCheck.java
@@ -16,6 +16,7 @@
 
 import static com.googlesource.gerrit.plugins.healthcheck.check.HealthCheckNames.PROJECTSLIST;
 
+import com.google.common.flogger.FluentLogger;
 import com.google.common.util.concurrent.ListeningExecutorService;
 import com.google.gerrit.extensions.common.ProjectInfo;
 import com.google.gerrit.metrics.MetricMaker;
@@ -27,12 +28,10 @@
 import com.google.inject.Singleton;
 import com.googlesource.gerrit.plugins.healthcheck.HealthCheckConfig;
 import java.util.SortedMap;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 @Singleton
 public class ProjectsListHealthCheck extends AbstractHealthCheck {
-  private static final Logger log = LoggerFactory.getLogger(ProjectsListHealthCheck.class);
+  private static final FluentLogger logger = FluentLogger.forEnclosingClass();
   private static final int PROJECTS_LIST_LIMIT = 100;
   private final Provider<ListProjects> listProjectsProvider;
   private final OneOffRequestContext oneOffCtx;
@@ -63,9 +62,10 @@
         if (projects != null && projects.size() > 0) {
           return Result.PASSED;
         }
-        log.warn("Empty or null projects list: Gerrit should always have at least 1 project");
+        logger.atWarning().log(
+            "Empty or null projects list: Gerrit should always have at least 1 project");
       } catch (Exception e) {
-        log.warn("Unable to list projects", e);
+        logger.atWarning().withCause(e).log("Unable to list projects");
       }
       return Result.FAILED;
     }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/QueryChangesHealthCheck.java b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/QueryChangesHealthCheck.java
index 7165b9f..c9bc3d1 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/QueryChangesHealthCheck.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/healthcheck/check/QueryChangesHealthCheck.java
@@ -16,6 +16,7 @@
 
 import static com.googlesource.gerrit.plugins.healthcheck.check.HealthCheckNames.QUERYCHANGES;
 
+import com.google.common.flogger.FluentLogger;
 import com.google.common.util.concurrent.ListeningExecutorService;
 import com.google.gerrit.metrics.MetricMaker;
 import com.google.gerrit.server.restapi.change.QueryChanges;
@@ -26,12 +27,10 @@
 import com.google.inject.Singleton;
 import com.googlesource.gerrit.plugins.healthcheck.HealthCheckConfig;
 import java.util.List;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 @Singleton
 public class QueryChangesHealthCheck extends AbstractHealthCheck {
-  private static final Logger log = LoggerFactory.getLogger(QueryChangesHealthCheck.class);
+  private static final FluentLogger logger = FluentLogger.forEnclosingClass();
   private final Provider<QueryChanges> queryChangesProvider;
   private final int limit;
   private final OneOffRequestContext oneOffCtx;
@@ -62,15 +61,14 @@
 
       List<?> changes = queryChanges.apply(null).value();
       if (changes == null) {
-        log.warn("Cannot query changes: received a null list of results");
+        logger.atWarning().log("Cannot query changes: received a null list of results");
         return Result.FAILED;
       }
 
       if (changes.size() < limit) {
-        log.warn(
-            "Query changes did not return enough items: expected {} items but got only {}",
-            limit,
-            changes.size());
+        logger.atWarning().log(
+            "Query changes did not return enough items: expected %d items but got only %d",
+            limit, changes.size());
         return Result.FAILED;
       }
 
