Merge branch 'stable-2.16' into stable-3.0

* stable-2.16:
  ReplicationQueue: Revert back from Flogger to slf4j logging

Change-Id: I82c8399626ed53331e18128a7979cb8e68bfa5f1
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/CreateProjectTask.java b/src/main/java/com/googlesource/gerrit/plugins/replication/CreateProjectTask.java
index 941719b..a8dede3 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/CreateProjectTask.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/CreateProjectTask.java
@@ -64,8 +64,7 @@
       return true;
     }
 
-    repLog.atWarning().log(
-        "Cannot create new project %s on remote site %s.", projectName, replicateURI);
+    repLog.warn("Cannot create new project {} on remote site {}.", projectName, replicateURI);
     return false;
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/DeleteProjectTask.java b/src/main/java/com/googlesource/gerrit/plugins/replication/DeleteProjectTask.java
index be8870b..f9b2ad7 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/DeleteProjectTask.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/DeleteProjectTask.java
@@ -55,7 +55,7 @@
       return;
     }
 
-    repLog.atWarning().log("Cannot delete project %s on remote site %s.", project, replicateURI);
+    repLog.warn("Cannot delete project {} on remote site {}.", project, replicateURI);
   }
 
   @Override
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java b/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java
index 51f894e..281cf6d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java
@@ -51,7 +51,6 @@
 import com.google.gerrit.server.project.ProjectCache;
 import com.google.gerrit.server.project.ProjectState;
 import com.google.gerrit.server.util.RequestContext;
-import com.google.gerrit.util.logging.NamedFluentLogger;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
 import com.google.inject.Provider;
@@ -83,9 +82,10 @@
 import org.eclipse.jgit.transport.RemoteConfig;
 import org.eclipse.jgit.transport.RemoteRefUpdate;
 import org.eclipse.jgit.transport.URIish;
+import org.slf4j.Logger;
 
 public class Destination {
-  private static final NamedFluentLogger repLog = ReplicationQueue.repLog;
+  private static final Logger repLog = ReplicationQueue.repLog;
 
   private static final String PROJECT_NOT_AVAILABLE = "source project %s not available";
 
@@ -157,7 +157,7 @@
           builder.add(g.getUUID());
           addRecursiveParents(g.getUUID(), builder, groupIncludeCache);
         } else {
-          repLog.atWarning().log("Group \"%s\" not recognized, removing from authGroup", name);
+          repLog.warn("Group \"{}\" not recognized, removing from authGroup", name);
         }
       }
       remoteUser = new RemoteSiteUser(new ListGroupMembership(builder.build()));
@@ -241,9 +241,11 @@
         int numInFlight = inFlight.size();
 
         if (numPending > 0 || numInFlight > 0) {
-          repLog.atWarning().log(
-              "Cancelling replication events (pending=%d, inFlight=%d) for destination %s",
-              numPending, numInFlight, getRemoteConfigName());
+          repLog.warn(
+              "Cancelling replication events (pending={}, inFlight={}) for destination {}",
+              numPending,
+              numInFlight,
+              getRemoteConfigName());
 
           foreachPushOp(
               pending,
@@ -279,8 +281,7 @@
     if (!config.replicateHiddenProjects()
         && state.getProject().getState()
             == com.google.gerrit.extensions.client.ProjectState.HIDDEN) {
-      repLog.atFine().log(
-          "Project %s is hidden and replication of hidden projects is disabled", name);
+      repLog.debug("Project {} is hidden and replication of hidden projects is disabled", name);
       return false;
     }
 
@@ -293,9 +294,10 @@
       permissionBackend.user(user).project(state.getNameKey()).check(permissionToCheck);
       return true;
     } catch (AuthException e) {
-      repLog.atFine().log(
-          "Project %s is not visible to current user %s",
-          name, user.getUserName().orElse("unknown"));
+      repLog.debug(
+          "Project {} is not visible to current user {}",
+          name,
+          user.getUserName().orElse("unknown"));
       return false;
     }
   }
@@ -310,20 +312,19 @@
                 try {
                   projectState = projectCache.checkedGet(project);
                 } catch (IOException e) {
-                  repLog.atWarning().withCause(e).log(
-                      "Error reading project %s from cache", project);
+                  repLog.warn("Error reading project {} from cache", project, e);
                   return false;
                 }
                 if (projectState == null) {
-                  repLog.atFine().log("Project %s does not exist", project);
+                  repLog.debug("Project {} does not exist", project);
                   throw new NoSuchProjectException(project);
                 }
                 if (!projectState.statePermitsRead()) {
-                  repLog.atFine().log("Project %s does not permit read", project);
+                  repLog.debug("Project {} does not permit read", project);
                   return false;
                 }
                 if (!shouldReplicate(projectState, userProvider.get())) {
-                  repLog.atFine().log("Project %s should not be replicated", project);
+                  repLog.debug("Project {} should not be replicated", project);
                   return false;
                 }
                 if (PushOne.ALL_REFS.equals(ref)) {
@@ -336,9 +337,11 @@
                       .ref(ref)
                       .check(RefPermission.READ);
                 } catch (AuthException e) {
-                  repLog.atFine().log(
-                      "Ref %s on project %s is not visible to calling user",
-                      ref, project, userProvider.get().getUserName().orElse("unknown"));
+                  repLog.debug(
+                      "Ref {} on project {} is not visible to calling user {}",
+                      ref,
+                      project,
+                      userProvider.get().getUserName().orElse("unknown"));
                   return false;
                 }
                 return true;
@@ -386,10 +389,10 @@
   void schedule(
       Project.NameKey project, String ref, URIish uri, ReplicationState state, boolean now) {
     if (!shouldReplicate(project, ref, state)) {
-      repLog.atFine().log("Not scheduling replication %s:%s => %s", project, ref, uri);
+      repLog.debug("Not scheduling replication {}:{} => {}", project, ref, uri);
       return;
     }
-    repLog.atInfo().log("scheduling replication %s:%s => %s", project, ref, uri);
+    repLog.info("scheduling replication {}:{} => {}", project, ref, uri);
 
     if (!config.replicatePermissions()) {
       PushOne e;
@@ -431,8 +434,7 @@
         task.addState(ref, state);
       }
       state.increasePushTaskCount(project.get(), ref);
-      repLog.atInfo().log(
-          "scheduled %s:%s => %s to run after %ds", project, ref, task, config.getDelay());
+      repLog.info("scheduled {}:{} => {} to run after {}s", project, ref, task, config.getDelay());
     }
   }
 
@@ -610,7 +612,7 @@
 
   boolean wouldPushProject(Project.NameKey project) {
     if (!shouldReplicate(project)) {
-      repLog.atFine().log("Skipping replication of project %s", project.get());
+      repLog.debug("Skipping replication of project {}", project.get());
       return false;
     }
 
@@ -622,8 +624,7 @@
 
     boolean matches = (new ReplicationFilter(projects)).matches(project);
     if (!matches) {
-      repLog.atFine().log(
-          "Skipping replication of project %s; does not match filter", project.get());
+      repLog.debug("Skipping replication of project {}; does not match filter", project.get());
     }
     return matches;
   }
@@ -648,7 +649,7 @@
 
   boolean wouldPushRef(String ref) {
     if (!config.replicatePermissions() && RefNames.REFS_CONFIG.equals(ref)) {
-      repLog.atFine().log("Skipping push of ref %s; it is a meta ref", ref);
+      repLog.debug("Skipping push of ref {}; it is a meta ref", ref);
       return false;
     }
     for (RefSpec s : config.getRemoteConfig().getPushRefSpecs()) {
@@ -656,7 +657,7 @@
         return true;
       }
     }
-    repLog.atFine().log("Skipping push of ref %s; it does not match push ref specs", ref);
+    repLog.debug("Skipping push of ref {}; it does not match push ref specs", ref);
     return false;
   }
 
@@ -688,8 +689,7 @@
         } else if (remoteNameStyle.equals("basenameOnly")) {
           name = FilenameUtils.getBaseName(name);
         } else if (!remoteNameStyle.equals("slash")) {
-          repLog.atFine().log(
-              "Unknown remoteNameStyle: %s, falling back to slash", remoteNameStyle);
+          repLog.debug("Unknown remoteNameStyle: {}, falling back to slash", remoteNameStyle);
         }
         String replacedPath = replaceName(uri.getPath(), name, isSingleProjectMatch());
         if (replacedPath != null) {
@@ -777,7 +777,7 @@
       try {
         eventDispatcher.get().postEvent(new Branch.NameKey(project, ref), event);
       } catch (PermissionBackendException e) {
-        repLog.atSevere().withCause(e).log("error posting event");
+        repLog.error("error posting event", e);
       }
     }
   }
@@ -791,7 +791,7 @@
       try {
         eventDispatcher.get().postEvent(new Branch.NameKey(project, ref), event);
       } catch (PermissionBackendException e) {
-        repLog.atSevere().withCause(e).log("error posting event");
+        repLog.error("error posting event", e);
       }
     }
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/GerritRestApi.java b/src/main/java/com/googlesource/gerrit/plugins/replication/GerritRestApi.java
index 44ec731..aaf2b15 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/GerritRestApi.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/GerritRestApi.java
@@ -62,34 +62,34 @@
 
   @Override
   public boolean createProject(Project.NameKey project, String head) {
-    repLog.atInfo().log("Creating project %s on %s", project, uri);
+    repLog.info("Creating project {} on {}", project, uri);
     String url = String.format("%s/a/projects/%s", toHttpUri(uri), Url.encode(project.get()));
     try {
       return httpClient
           .execute(new HttpPut(url), new HttpResponseHandler(), getContext())
           .isSuccessful();
     } catch (IOException e) {
-      repLog.atSevere().log("Couldn't perform project creation on %s", uri, e);
+      repLog.error("Couldn't perform project creation on {}", uri, e);
       return false;
     }
   }
 
   @Override
   public boolean deleteProject(Project.NameKey project) {
-    repLog.atInfo().log("Deleting project %s on %s", project, uri);
+    repLog.info("Deleting project {} on {}", project, uri);
     String url = String.format("%s/a/projects/%s", toHttpUri(uri), Url.encode(project.get()));
     try {
       httpClient.execute(new HttpDelete(url), new HttpResponseHandler(), getContext());
       return true;
     } catch (IOException e) {
-      repLog.atSevere().log("Couldn't perform project deletion on %s", uri, e);
+      repLog.error("Couldn't perform project deletion on {}", uri, e);
     }
     return false;
   }
 
   @Override
   public boolean updateHead(Project.NameKey project, String newHead) {
-    repLog.atInfo().log("Updating head of %s on %s", project, uri);
+    repLog.info("Updating head of {} on {}", project, uri);
     String url = String.format("%s/a/projects/%s/HEAD", toHttpUri(uri), Url.encode(project.get()));
     try {
       HttpPut req = new HttpPut(url);
@@ -99,7 +99,7 @@
       httpClient.execute(req, new HttpResponseHandler(), getContext());
       return true;
     } catch (IOException e) {
-      repLog.atSevere().log("Couldn't perform update head on %s", uri, e);
+      repLog.error("Couldn't perform update head on {}", uri, e);
     }
     return false;
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/LocalFS.java b/src/main/java/com/googlesource/gerrit/plugins/replication/LocalFS.java
index 8efe4bc..aa6e16c 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/LocalFS.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/LocalFS.java
@@ -43,9 +43,9 @@
         u.disableRefLog();
         u.link(head);
       }
-      repLog.atInfo().log("Created local repository: %s", uri);
+      repLog.info("Created local repository: {}", uri);
     } catch (IOException e) {
-      repLog.atSevere().withCause(e).log("Error creating local repository %s", uri.getPath());
+      repLog.error("Error creating local repository {}", uri.getPath(), e);
       return false;
     }
     return true;
@@ -55,9 +55,9 @@
   public boolean deleteProject(Project.NameKey project) {
     try {
       recursivelyDelete(new File(uri.getPath()));
-      repLog.atInfo().log("Deleted local repository: %s", uri);
+      repLog.info("Deleted local repository: {}", uri);
     } catch (IOException e) {
-      repLog.atSevere().withCause(e).log("Error deleting local repository %s:\n", uri.getPath());
+      repLog.error("Error deleting local repository {}:\n", uri.getPath(), e);
       return false;
     }
     return true;
@@ -71,8 +71,7 @@
         u.link(newHead);
       }
     } catch (IOException e) {
-      repLog.atSevere().withCause(e).log(
-          "Failed to update HEAD of repository %s to %s", uri.getPath(), newHead);
+      repLog.error("Failed to update HEAD of repository {} to {}", uri.getPath(), newHead, e);
       return false;
     }
     return true;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/PushOne.java b/src/main/java/com/googlesource/gerrit/plugins/replication/PushOne.java
index 5e187f6..0981e86 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/PushOne.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/PushOne.java
@@ -164,16 +164,17 @@
 
   @Override
   public void cancel() {
-    repLog.atInfo().log("Replication [%s] to %s was canceled", HexFormat.fromInt(id), getURI());
+    repLog.info("Replication [{}] to {} was canceled", HexFormat.fromInt(id), getURI());
     canceledByReplication();
     pool.pushWasCanceled(this);
   }
 
   @Override
   public void setCanceledWhileRunning() {
-    repLog.atInfo().log(
-        "Replication [%s] to %s was canceled while being executed",
-        HexFormat.fromInt(id), getURI());
+    repLog.info(
+        "Replication [{}] to {} was canceled while being executed",
+        HexFormat.fromInt(id),
+        getURI());
     canceledWhileRunning.set(true);
   }
 
@@ -228,10 +229,10 @@
     if (ALL_REFS.equals(ref)) {
       delta.clear();
       pushAllRefs = true;
-      repLog.atFinest().log("Added all refs for replication to %s", uri);
+      repLog.trace("Added all refs for replication to {}", uri);
     } else if (!pushAllRefs) {
       delta.add(ref);
-      repLog.atFinest().log("Added ref %s for replication to %s", ref, uri);
+      repLog.trace("Added ref {} for replication to {}", ref, uri);
     }
   }
 
@@ -316,18 +317,18 @@
     RunwayStatus status = pool.requestRunway(this);
     if (!status.isAllowed()) {
       if (status.isCanceled()) {
-        repLog.atInfo().log(
-            "PushOp for replication to %s was canceled and thus won't be rescheduled", uri);
+        repLog.info("PushOp for replication to {} was canceled and thus won't be rescheduled", uri);
       } else {
-        repLog.atInfo().log(
-            "Rescheduling replication to %s to avoid collision with the in-flight push [%s].",
-            uri, HexFormat.fromInt(status.getInFlightPushId()));
+        repLog.info(
+            "Rescheduling replication to {} to avoid collision with the in-flight push [{}].",
+            uri,
+            HexFormat.fromInt(status.getInFlightPushId()));
         pool.reschedule(this, Destination.RetryReason.COLLISION);
       }
       return;
     }
 
-    repLog.atInfo().log("Replication to %s started...", uri);
+    repLog.info("Replication to {} started...", uri);
     Timer1.Context context = metrics.start(config.getName());
     try {
       long startedAt = context.getStartTime();
@@ -336,9 +337,12 @@
       git = gitManager.openRepository(projectName);
       runImpl();
       long elapsed = NANOSECONDS.toMillis(context.stop());
-      repLog.atInfo().log(
-          "Replication to %s completed in %dms, %dms delay, %d retries",
-          uri, elapsed, delay, retryCount);
+      repLog.info(
+          "Replication to {} completed in {}ms, {}ms delay, {} retries",
+          uri,
+          elapsed,
+          delay,
+          retryCount);
     } catch (RepositoryNotFoundException e) {
       stateLog.error(
           "Cannot replicate " + projectName + "; Local repository error: " + e.getMessage(),
@@ -355,7 +359,7 @@
           || msg.contains("unavailable")) {
         createRepository();
       } else {
-        repLog.atSevere().log("Cannot replicate %s; Remote repository error: %s", projectName, msg);
+        repLog.error("Cannot replicate {}; Remote repository error: {}", projectName, msg);
       }
 
     } catch (NoRemoteRepositoryException e) {
@@ -365,10 +369,10 @@
     } catch (TransportException e) {
       Throwable cause = e.getCause();
       if (cause instanceof JSchException && cause.getMessage().startsWith("UnknownHostKey:")) {
-        repLog.atSevere().log("Cannot replicate to %s: %s", uri, cause.getMessage());
+        repLog.error("Cannot replicate to {}: {}", uri, cause.getMessage());
       } else if (e instanceof LockFailureException) {
         lockRetryCount++;
-        repLog.atSevere().log("Cannot replicate to %s due to lock failure", uri);
+        repLog.error("Cannot replicate to {} due to lock failure", uri);
 
         // The remote push operation should be retried.
         if (lockRetryCount <= maxLockRetries) {
@@ -378,14 +382,14 @@
             pool.reschedule(this, Destination.RetryReason.TRANSPORT_ERROR);
           }
         } else {
-          repLog.atSevere().log(
-              "Giving up after %d lock failures during replication to %s", lockRetryCount, uri);
+          repLog.error(
+              "Giving up after {} lock failures during replication to {}", lockRetryCount, uri);
         }
       } else {
         if (canceledWhileRunning.get()) {
           logCanceledWhileRunningException(e);
         } else {
-          repLog.atSevere().withCause(e).log("Cannot replicate to %s", uri);
+          repLog.error("Cannot replicate to {}", uri, e);
           // The remote push operation should be retried.
           pool.reschedule(this, Destination.RetryReason.TRANSPORT_ERROR);
         }
@@ -403,7 +407,7 @@
   }
 
   private void logCanceledWhileRunningException(TransportException e) {
-    repLog.atInfo().withCause(e).log("Cannot replicate to %s. It was canceled while running", uri);
+    repLog.info("Cannot replicate to {}. It was canceled while running", uri, e);
   }
 
   private void createRepository() {
@@ -411,11 +415,10 @@
       try {
         Ref head = git.exactRef(Constants.HEAD);
         if (createProject(projectName, head != null ? getName(head) : null)) {
-          repLog.atWarning().log("Missing repository created; retry replication to %s", uri);
+          repLog.warn("Missing repository created; retry replication to {}", uri);
           pool.reschedule(this, Destination.RetryReason.REPOSITORY_MISSING);
         } else {
-          repLog.atWarning().log(
-              "Missing repository could not be created when replicating %s", uri);
+          repLog.warn("Missing repository could not be created when replicating {}", uri);
         }
       } catch (IOException ioe) {
         stateLog.error(
@@ -462,10 +465,10 @@
     }
 
     if (replConfig.getMaxRefsToLog() == 0 || todo.size() <= replConfig.getMaxRefsToLog()) {
-      repLog.atInfo().log("Push to %s references: %s", uri, todo);
+      repLog.info("Push to {} references: {}", uri, todo);
     } else {
-      repLog.atInfo().log(
-          "Push to %s references (first %d of %d listed): %s",
+      repLog.info(
+          "Push to {} references (first {} of {} listed): {}",
           uri,
           replConfig.getMaxRefsToLog(),
           todo.size(),
@@ -524,7 +527,7 @@
     Map<String, Ref> remote = listRemote(tn);
     for (Ref src : local.values()) {
       if (!canPushRef(src.getName(), noPerms)) {
-        repLog.atFine().log("Skipping push of ref %s", src.getName());
+        repLog.debug("Skipping push of ref {}", src.getName());
         continue;
       }
 
@@ -541,7 +544,7 @@
     if (config.isMirror()) {
       for (Ref ref : remote.values()) {
         if (Constants.HEAD.equals(ref.getName())) {
-          repLog.atFine().log("Skipping deletion of %s", ref.getName());
+          repLog.debug("Skipping deletion of {}", ref.getName());
           continue;
         }
         RefSpec spec = matchDst(ref.getName());
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/RemoteSsh.java b/src/main/java/com/googlesource/gerrit/plugins/replication/RemoteSsh.java
index e313079..2d66431 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/RemoteSsh.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/RemoteSsh.java
@@ -42,14 +42,18 @@
     OutputStream errStream = sshHelper.newErrorBufferStream();
     try {
       sshHelper.executeRemoteSsh(uri, cmd, errStream);
-      repLog.atInfo().log("Created remote repository: %s", uri);
+      repLog.info("Created remote repository: {}", uri);
     } catch (IOException e) {
-      repLog.atSevere().withCause(e).log(
-          "Error creating remote repository at %s:\n"
-              + "  Exception: %s\n"
-              + "  Command: %s\n"
-              + "  Output: %s",
-          uri, e, cmd, errStream);
+      repLog.error(
+          "Error creating remote repository at {}:\n"
+              + "  Exception: {}\n"
+              + "  Command: {}\n"
+              + "  Output: {}",
+          uri,
+          e,
+          cmd,
+          errStream,
+          e);
       return false;
     }
     return true;
@@ -62,14 +66,18 @@
     OutputStream errStream = sshHelper.newErrorBufferStream();
     try {
       sshHelper.executeRemoteSsh(uri, cmd, errStream);
-      repLog.atInfo().log("Deleted remote repository: %s", uri);
+      repLog.info("Deleted remote repository: {}", uri);
     } catch (IOException e) {
-      repLog.atSevere().withCause(e).log(
-          "Error deleting remote repository at %s}:\n"
-              + "  Exception: %s\n"
-              + "  Command: %s\n"
-              + "  Output: %s",
-          uri, e, cmd, errStream);
+      repLog.error(
+          "Error deleting remote repository at {}}:\n"
+              + "  Exception: {}\n"
+              + "  Command: {}\n"
+              + "  Output: {}",
+          uri,
+          e,
+          cmd,
+          errStream,
+          e);
       return false;
     }
     return true;
@@ -84,12 +92,17 @@
     try {
       sshHelper.executeRemoteSsh(uri, cmd, errStream);
     } catch (IOException e) {
-      repLog.atSevere().withCause(e).log(
-          "Error updating HEAD of remote repository at %s to %s:\n"
-              + "  Exception: %s\n"
-              + "  Command: %s\n"
-              + "  Output: %s",
-          uri, newHead, e, cmd, errStream);
+      repLog.error(
+          "Error updating HEAD of remote repository at {} to {}:\n"
+              + "  Exception: {}\n"
+              + "  Command: {}\n"
+              + "  Output: {}",
+          uri,
+          newHead,
+          e,
+          cmd,
+          errStream,
+          e);
       return false;
     }
     return true;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationFileBasedConfig.java b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationFileBasedConfig.java
index d586e62..1f0c40e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationFileBasedConfig.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationFileBasedConfig.java
@@ -208,7 +208,7 @@
         try {
           uri = new URIish(url);
         } catch (URISyntaxException e) {
-          repLog.atWarning().log("adminURL '%s' is invalid: %s", url, e.getMessage());
+          repLog.warn("adminURL '{}' is invalid: {}", url, e.getMessage());
           continue;
         }
 
@@ -216,14 +216,13 @@
           String path =
               replaceName(uri.getPath(), projectName.get(), config.isSingleProjectMatch());
           if (path == null) {
-            repLog.atWarning().log("adminURL %s does not contain ${name}", uri);
+            repLog.warn("adminURL {} does not contain ${name}", uri);
             continue;
           }
 
           uri = uri.setPath(path);
           if (!isSSH(uri)) {
-            repLog.atWarning().log(
-                "adminURL '%s' is invalid: only SSH and HTTP are supported", uri);
+            repLog.warn("adminURL '{}' is invalid: only SSH and HTTP are supported", uri);
             continue;
           }
         }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationQueue.java b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationQueue.java
index 7a92173..cad7623 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationQueue.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationQueue.java
@@ -26,7 +26,6 @@
 import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.server.events.EventDispatcher;
 import com.google.gerrit.server.git.WorkQueue;
-import com.google.gerrit.util.logging.NamedFluentLogger;
 import com.google.inject.Inject;
 import com.googlesource.gerrit.plugins.replication.PushResultProcessing.GitUpdateProcessing;
 import com.googlesource.gerrit.plugins.replication.ReplicationConfig.FilterType;
@@ -36,6 +35,8 @@
 import java.util.Queue;
 import java.util.Set;
 import org.eclipse.jgit.transport.URIish;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /** Manages automatic replication to remote repositories. */
 public class ReplicationQueue
@@ -44,7 +45,7 @@
         ProjectDeletedListener,
         HeadUpdatedListener {
   static final String REPLICATION_LOG_NAME = "replication_log";
-  static final NamedFluentLogger repLog = NamedFluentLogger.forName(REPLICATION_LOG_NAME);
+  static final Logger repLog = LoggerFactory.getLogger(REPLICATION_LOG_NAME);
 
   private final ReplicationStateListener stateLog;
 
@@ -86,7 +87,7 @@
     running = false;
     int discarded = config.shutdown();
     if (discarded > 0) {
-      repLog.atWarning().log("Canceled %d replication events during shutdown", discarded);
+      repLog.warn("Canceled {} replication events during shutdown", discarded);
     }
   }
 
@@ -163,7 +164,7 @@
         cfg.schedule(project, refName, uri, state);
       }
     } else {
-      repLog.atFine().log("Skipping ref %s on project %s", refName, project.get());
+      repLog.debug("Skipping ref {} on project {}", refName, project.get());
     }
 
     if (withoutState) {
@@ -178,12 +179,12 @@
       replaying = true;
       for (ReplicationTasksStorage.ReplicateRefUpdate t : replicationTasksStorage.list()) {
         if (t == null) {
-          repLog.atWarning().log("Encountered null replication event in ReplicationTasksStorage");
+          repLog.warn("Encountered null replication event in ReplicationTasksStorage");
           continue;
         }
         String eventKey = String.format("%s:%s", t.project, t.ref);
         if (!eventsReplayed.contains(eventKey)) {
-          repLog.atInfo().log("Firing pending task %s", eventKey);
+          repLog.info("Firing pending task {}", eventKey);
           onGitReferenceUpdated(t.project, t.ref);
           eventsReplayed.add(eventKey);
         }
@@ -212,7 +213,7 @@
     for (ReferenceUpdatedEvent event : beforeStartupEventsQueue) {
       String eventKey = String.format("%s:%s", event.projectName(), event.refName());
       if (!eventsReplayed.contains(eventKey)) {
-        repLog.atInfo().log("Firing pending task %s", event);
+        repLog.info("Firing pending task {}", event);
         onGitReferenceUpdated(event.projectName(), event.refName());
         eventsReplayed.add(eventKey);
       }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationStateLogger.java b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationStateLogger.java
index 3e73033..f2d55de 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationStateLogger.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationStateLogger.java
@@ -31,19 +31,19 @@
   @Override
   public void warn(String msg, ReplicationState... states) {
     stateWriteErr("Warning: " + msg, states);
-    repLog.atWarning().log(msg);
+    repLog.warn(msg);
   }
 
   @Override
   public void error(String msg, ReplicationState... states) {
     stateWriteErr("Error: " + msg, states);
-    repLog.atSevere().log(msg);
+    repLog.error(msg);
   }
 
   @Override
   public void error(String msg, Throwable t, ReplicationState... states) {
     stateWriteErr("Error: " + msg, states);
-    repLog.atSevere().withCause(t).log(msg);
+    repLog.error(msg, t);
   }
 
   private void stateWriteErr(String msg, ReplicationState[] states) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/UpdateHeadTask.java b/src/main/java/com/googlesource/gerrit/plugins/replication/UpdateHeadTask.java
index d57605b..70452b4 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/UpdateHeadTask.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/UpdateHeadTask.java
@@ -58,8 +58,7 @@
       return;
     }
 
-    repLog.atWarning().log(
-        "Cannot update HEAD of project %s on remote site %s.", project, replicateURI);
+    repLog.warn("Cannot update HEAD of project {} on remote site {}.", project, replicateURI);
   }
 
   @Override