Use Flogger for writing logs

Signed-off-by: Edwin Kempin <ekempin@google.com>
Change-Id: Ie3a64e3feb23b5b229a25df6956ada2818b31fe2
diff --git a/src/main/java/com/googlesource/gerrit/plugins/automerger/AutomergeChangeAction.java b/src/main/java/com/googlesource/gerrit/plugins/automerger/AutomergeChangeAction.java
index 9af6912..c8ac730 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/automerger/AutomergeChangeAction.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/automerger/AutomergeChangeAction.java
@@ -14,6 +14,7 @@
 
 package com.googlesource.gerrit.plugins.automerger;
 
+import com.google.common.flogger.FluentLogger;
 import com.google.gerrit.entities.Change;
 import com.google.gerrit.exceptions.StorageException;
 import com.google.gerrit.extensions.restapi.ResourceConflictException;
@@ -29,14 +30,12 @@
 import java.io.IOException;
 import java.util.Map;
 import org.eclipse.jgit.errors.ConfigInvalidException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /** Implementation behind the "Recreate Automerges" button. */
 class AutomergeChangeAction
     implements UiAction<RevisionResource>,
         RestModifyView<RevisionResource, AutomergeChangeAction.Input> {
-  private static final Logger log = LoggerFactory.getLogger(AutomergeChangeAction.class);
+  private static final FluentLogger logger = FluentLogger.forEnclosingClass();
 
   private Provider<CurrentUser> user;
   private ConfigLoader config;
@@ -68,7 +67,7 @@
 
     Change change = rev.getChange();
     if (branchMap == null) {
-      log.debug("Branch map is empty for change {}", change.getKey().get());
+      logger.atFine().log("Branch map is empty for change %s", change.getKey().get());
       return Response.none();
     }
     String revision = rev.getPatchSet().commitId().name();
@@ -83,7 +82,7 @@
     mdsMergeInput.obsoleteRevision = revision;
     mdsMergeInput.currentRevision = revision;
 
-    log.debug("Multiple downstream merge input: {}", mdsMergeInput.dsBranchMap);
+    logger.atFine().log("Multiple downstream merge input: %s", mdsMergeInput.dsBranchMap);
 
     try {
       dsCreator.createMergesAndHandleConflicts(mdsMergeInput);
@@ -116,7 +115,7 @@
         desc = desc.setVisible(user.get() instanceof IdentifiedUser);
       }
     } catch (RestApiException | IOException | ConfigInvalidException e) {
-      log.error("Failed to recreate automerges for {} on {}", project, branch);
+      logger.atSevere().log("Failed to recreate automerges for %s on %s", project, branch);
       desc = desc.setVisible(false);
     }
     return desc;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/automerger/ConfigLoader.java b/src/main/java/com/googlesource/gerrit/plugins/automerger/ConfigLoader.java
index e2abb1f..4d6dd8b 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/automerger/ConfigLoader.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/automerger/ConfigLoader.java
@@ -17,6 +17,7 @@
 import com.google.common.base.Joiner;
 import com.google.common.base.Splitter;
 import com.google.common.base.Strings;
+import com.google.common.flogger.FluentLogger;
 import com.google.gerrit.entities.Account;
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.api.GerritApi;
@@ -39,13 +40,11 @@
 import java.util.Set;
 import org.eclipse.jgit.errors.ConfigInvalidException;
 import org.eclipse.jgit.lib.Config;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /** Class to read the config. */
 @Singleton
 public class ConfigLoader {
-  private static final Logger log = LoggerFactory.getLogger(ConfigLoader.class);
+  private static final FluentLogger logger = FluentLogger.forEnclosingClass();
   private static final String BRANCH_DELIMITER = ":";
   private static final String DEFAULT_CONFLICT_MESSAGE = "Merge conflict found on ${branch}";
 
@@ -194,10 +193,10 @@
       Set<String> projectSet = getManifestProjects(fromBranch, toBranch);
       projectSet = applyConfig(fromBranch, toBranch, projectSet);
 
-      log.debug("Project set for {} to {} is {}", fromBranch, toBranch, projectSet);
+      logger.atFine().log("Project set for %s to %s is %s", fromBranch, toBranch, projectSet);
       return projectSet;
     } catch (RestApiException | IOException e) {
-      log.error("Error reading manifest for {}!", fromBranch, e);
+      logger.atSevere().withCause(e).log("Error reading manifest for %s!", fromBranch);
       throw e;
     }
   }
@@ -362,7 +361,7 @@
       ManifestReader manifestReader = new ManifestReader(branch, manifestConfig.asString());
       return manifestReader.getProjects();
     } catch (ResourceNotFoundException e) {
-      log.debug("Manifest for {} not found", branch);
+      logger.atFine().log("Manifest for %s not found", branch);
       return new HashSet<>();
     }
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/automerger/DownstreamCreator.java b/src/main/java/com/googlesource/gerrit/plugins/automerger/DownstreamCreator.java
index 63416a4..5b06a9d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/automerger/DownstreamCreator.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/automerger/DownstreamCreator.java
@@ -16,6 +16,7 @@
 import static com.google.common.base.Strings.isNullOrEmpty;
 
 import com.google.common.base.Joiner;
+import com.google.common.flogger.FluentLogger;
 import com.google.gerrit.exceptions.StorageException;
 import com.google.gerrit.extensions.api.GerritApi;
 import com.google.gerrit.extensions.api.changes.AbandonInput;
@@ -55,8 +56,6 @@
 import java.util.TreeMap;
 import java.util.UUID;
 import org.eclipse.jgit.errors.ConfigInvalidException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * DownstreamCreator will receive an event on an uploaded, published, or restored patchset, and
@@ -70,7 +69,7 @@
         CommentAddedListener,
         RevisionCreatedListener,
         TopicEditedListener {
-  private static final Logger log = LoggerFactory.getLogger(DownstreamCreator.class);
+  private static final FluentLogger logger = FluentLogger.forEnclosingClass();
   private static final String AUTOMERGER_TAG = "autogenerated:Automerger";
   private static final String MERGE_CONFLICT_TAG = "autogenerated:MergeConflict";
   private static final String SUBJECT_PREFIX = "automerger";
@@ -106,10 +105,11 @@
               .revision(event.getRevision()._number)
               .commit(false)
               .commit;
-      log.debug("Detected revision {} abandoned on {}.", revision, change.project);
+      logger.atFine().log("Detected revision %s abandoned on %s.", revision, change.project);
       abandonDownstream(change, revision);
     } catch (ConfigInvalidException | StorageException | RestApiException e) {
-      log.error("Automerger plugin failed onChangeAbandoned for {}", event.getChange().id, e);
+      logger.atSevere().withCause(e).log(
+          "Automerger plugin failed onChangeAbandoned for %s", event.getChange().id);
     }
   }
 
@@ -130,7 +130,8 @@
                 .id(eventChange._number)
                 .get(EnumSet.of(ListChangesOption.CURRENT_REVISION));
       } catch (RestApiException e) {
-        log.error("Automerger could not get change with current revision for onTopicEdited: ", e);
+        logger.atSevere().withCause(e).log(
+            "Automerger could not get change with current revision for onTopicEdited.");
         return;
       }
       String oldTopic = event.getOldTopic();
@@ -139,12 +140,13 @@
       try {
         downstreamBranches = config.getDownstreamBranches(change.branch, change.project);
       } catch (RestApiException | IOException | ConfigInvalidException e) {
-        log.error("Failed to edit downstream topics of {}", change.id, e);
+        logger.atSevere().withCause(e).log("Failed to edit downstream topics of %s", change.id);
         return;
       }
 
       if (downstreamBranches.isEmpty()) {
-        log.debug("Downstream branches of {} on {} are empty", change.branch, change.project);
+        logger.atFine().log(
+            "Downstream branches of %s on %s are empty", change.branch, change.project);
         return;
       }
 
@@ -159,7 +161,8 @@
           reviewInput.notify = NotifyHandling.NONE;
           gApi.changes().id(change._number).revision(CURRENT).review(reviewInput);
         } catch (RestApiException e) {
-          log.error("Failed to prevent setting empty topic for automerger plugin.", e);
+          logger.atSevere().withCause(e).log(
+              "Failed to prevent setting empty topic for automerger plugin.");
         }
       } else {
         for (String downstreamBranch : downstreamBranches) {
@@ -167,16 +170,17 @@
             List<Integer> existingDownstream =
                 getExistingMergesOnBranch(revision, oldTopic, downstreamBranch);
             for (Integer changeNumber : existingDownstream) {
-              log.debug("Setting topic {} on {}", change.topic, changeNumber);
+              logger.atFine().log("Setting topic %s on %s", change.topic, changeNumber);
               gApi.changes().id(changeNumber).topic(change.topic);
             }
           } catch (RestApiException | InvalidQueryParameterException e) {
-            log.error("Failed to edit downstream topics of {}", change.id, e);
+            logger.atSevere().withCause(e).log("Failed to edit downstream topics of %s", change.id);
           }
         }
       }
     } catch (StorageException | ConfigInvalidException e) {
-      log.error("Automerger plugin failed onTopicEdited for {}", event.getChange().id, e);
+      logger.atSevere().withCause(e).log(
+          "Automerger plugin failed onTopicEdited for %s", event.getChange().id);
     }
   }
 
@@ -190,8 +194,8 @@
     try (ManualRequestContext ctx = oneOffRequestContext.openAs(config.getContextUserId())) {
       RevisionInfo eventRevision = event.getRevision();
       if (!eventRevision.isCurrent) {
-        log.info(
-            "Not updating downstream votes since revision {} is not current.",
+        logger.atInfo().log(
+            "Not updating downstream votes since revision %s is not current.",
             eventRevision._number);
         return;
       }
@@ -201,7 +205,8 @@
       downstreamBranches = config.getDownstreamBranches(change.branch, change.project);
 
       if (downstreamBranches.isEmpty()) {
-        log.debug("Downstream branches of {} on {} are empty", change.branch, change.project);
+        logger.atFine().log(
+            "Downstream branches of %s on %s are empty", change.branch, change.project);
         return;
       }
 
@@ -233,11 +238,13 @@
             }
           }
         } catch (RestApiException | InvalidQueryParameterException e) {
-          log.error("Exception when updating downstream votes of {}", change.id, e);
+          logger.atSevere().withCause(e).log(
+              "Exception when updating downstream votes of %s", change.id);
         }
       }
     } catch (StorageException | ConfigInvalidException | RestApiException | IOException e) {
-      log.error("Automerger plugin failed onCommentAdded for {}", event.getChange().id, e);
+      logger.atSevere().withCause(e).log(
+          "Automerger plugin failed onCommentAdded for %s", event.getChange().id);
     }
   }
 
@@ -256,7 +263,8 @@
         | ConfigInvalidException
         | InvalidQueryParameterException
         | StorageException e) {
-      log.error("Automerger plugin failed onChangeRestored for {}", event.getChange().id, e);
+      logger.atSevere().withCause(e).log(
+          "Automerger plugin failed onChangeRestored for %s", event.getChange().id);
     }
   }
 
@@ -275,7 +283,8 @@
         | ConfigInvalidException
         | InvalidQueryParameterException
         | StorageException e) {
-      log.error("Automerger plugin failed onRevisionCreated for {}", event.getChange().id, e);
+      logger.atSevere().withCause(e).log(
+          "Automerger plugin failed onRevisionCreated for %s", event.getChange().id);
     }
   }
 
@@ -284,7 +293,7 @@
     try (ManualRequestContext ctx = oneOffRequestContext.openAs(config.getContextUserId())) {
       if (isNullOrEmpty(topic)) {
         topic = "am-" + UUID.randomUUID();
-        log.debug("Setting original change {} topic to {}", sourceId, topic);
+        logger.atFine().log("Setting original change %s topic to %s", sourceId, topic);
         gApi.changes().id(sourceId).topic(topic);
       }
       return topic;
@@ -367,10 +376,9 @@
               getExistingMergesOnBranch(
                   mdsMergeInput.obsoleteRevision, mdsMergeInput.topic, downstreamBranch);
           if (!existingDownstream.isEmpty()) {
-            log.debug(
-                "Attempting to update downstream merge of {} on branch {}",
-                mdsMergeInput.currentRevision,
-                downstreamBranch);
+            logger.atFine().log(
+                "Attempting to update downstream merge of %s on branch %s",
+                mdsMergeInput.currentRevision, downstreamBranch);
             // existingDownstream should almost always be of length one, but
             // it's possible to construct it so that it's not
             for (Integer dsChangeNumber : existingDownstream) {
@@ -385,18 +393,17 @@
                 createDownstreams = false;
               } catch (MergeConflictException e) {
                 failedMergeBranchMap.put(downstreamBranch, e.getMessage());
-                log.debug(
-                    "Abandoning existing, obsolete {} due to merge conflict.", dsChangeNumber);
+                logger.atFine().log(
+                    "Abandoning existing, obsolete %s due to merge conflict.", dsChangeNumber);
                 abandonChange(dsChangeNumber);
               }
             }
           }
         }
         if (createDownstreams) {
-          log.debug(
-              "Attempting to create downstream merge of {} on branch {}",
-              mdsMergeInput.currentRevision,
-              downstreamBranch);
+          logger.atFine().log(
+              "Attempting to create downstream merge of %s on branch %s",
+              mdsMergeInput.currentRevision, downstreamBranch);
           SingleDownstreamMergeInput sdsMergeInput = new SingleDownstreamMergeInput();
           sdsMergeInput.currentRevision = mdsMergeInput.currentRevision;
           sdsMergeInput.changeNumber = mdsMergeInput.changeNumber;
@@ -482,10 +489,9 @@
       String currentTopic = getOrSetTopic(sdsMergeInput.changeNumber, sdsMergeInput.topic);
 
       if (isAlreadyMerged(sdsMergeInput, currentTopic)) {
-        log.info(
-            "Commit {} already merged into {}, not automerging again.",
-            sdsMergeInput.currentRevision,
-            sdsMergeInput.downstreamBranch);
+        logger.atInfo().log(
+            "Commit %s already merged into %s, not automerging again.",
+            sdsMergeInput.currentRevision, sdsMergeInput.downstreamBranch);
         return;
       }
 
@@ -493,7 +499,7 @@
       mergeInput.source = sdsMergeInput.currentRevision;
       mergeInput.strategy = "recursive";
 
-      log.debug("Creating downstream merge for {}", sdsMergeInput.currentRevision);
+      logger.atFine().log("Creating downstream merge for %s", sdsMergeInput.currentRevision);
       ChangeInput downstreamChangeInput = new ChangeInput();
       downstreamChangeInput.project = sdsMergeInput.project;
       downstreamChangeInput.branch = sdsMergeInput.downstreamBranch;
@@ -513,10 +519,9 @@
         downstreamChangeInput.subject =
             getSubjectForDownstreamMerge(
                 sdsMergeInput.subject, sdsMergeInput.currentRevision, true);
-        log.debug(
-            "Skipping merge for {} to {}",
-            sdsMergeInput.currentRevision,
-            sdsMergeInput.downstreamBranch);
+        logger.atFine().log(
+            "Skipping merge for %s to %s",
+            sdsMergeInput.currentRevision, sdsMergeInput.downstreamBranch);
       }
 
       ChangeApi downstreamChange = gApi.changes().create(downstreamChangeInput);
@@ -539,7 +544,7 @@
   private String getBaseChangeId(List<String> parents, String branch)
       throws InvalidQueryParameterException, RestApiException {
     if (parents.isEmpty()) {
-      log.info("No base change id for change with no parents.");
+      logger.atInfo().log("No base change id for change with no parents.");
       return null;
     }
     // 1) Get topic of first parent
@@ -565,13 +570,14 @@
           StorageException {
     String currentRevision =
         gApi.changes().id(change._number).revision(revisionInfo._number).commit(false).commit;
-    log.debug(
-        "Handling patchsetevent with change id {} and revision {}", change.id, currentRevision);
+    logger.atFine().log(
+        "Handling patchsetevent with change id %s and revision %s", change.id, currentRevision);
 
     Set<String> downstreamBranches = config.getDownstreamBranches(change.branch, change.project);
 
     if (downstreamBranches.isEmpty()) {
-      log.debug("Downstream branches of {} on {} are empty", change.branch, change.project);
+      logger.atFine().log(
+          "Downstream branches of %s on %s are empty", change.branch, change.project);
       return;
     }
 
@@ -581,7 +587,7 @@
       boolean isSkipMerge = config.isSkipMerge(change.branch, downstreamBranch, change.subject);
       dsBranchMap.put(downstreamBranch, !isSkipMerge);
     }
-    log.debug("Automerging change {} from branch {}", change.id, change.branch);
+    logger.atFine().log("Automerging change %s from branch %s", change.id, change.branch);
 
     ChangeApi currentChange = gApi.changes().id(change._number);
     String previousRevision = getPreviousRevision(currentChange, revisionInfo._number);
@@ -604,25 +610,26 @@
     try {
       Set<String> downstreamBranches = config.getDownstreamBranches(change.branch, change.project);
       if (downstreamBranches.isEmpty()) {
-        log.debug("Downstream branches of {} on {} are empty", change.branch, change.project);
+        logger.atFine().log(
+            "Downstream branches of %s on %s are empty", change.branch, change.project);
         return;
       }
 
       for (String downstreamBranch : downstreamBranches) {
         List<Integer> existingDownstream =
             getExistingMergesOnBranch(revision, change.topic, downstreamBranch);
-        log.debug("Abandoning existing downstreams: {}", existingDownstream);
+        logger.atFine().log("Abandoning existing downstreams: %s", existingDownstream);
         for (Integer changeNumber : existingDownstream) {
           abandonChange(changeNumber);
         }
       }
     } catch (RestApiException | IOException | InvalidQueryParameterException e) {
-      log.error("Failed to abandon downstreams of {}", change.id, e);
+      logger.atSevere().withCause(e).log("Failed to abandon downstreams of %s", change.id);
     }
   }
 
   private void updateVote(ChangeInfo change, String label, short vote) throws RestApiException {
-    log.debug("Giving {} for label {} to {}", vote, label, change.id);
+    logger.atFine().log("Giving %s for label %s to %s", vote, label, change.id);
     // Vote on all downstream branches unless merge conflict.
     ReviewInput reviewInput = new ReviewInput();
     Map<String, Short> labels = new HashMap<>();
@@ -633,7 +640,7 @@
     try {
       gApi.changes().id(change.id).revision(CURRENT).review(reviewInput);
     } catch (AuthException e) {
-      log.error("Automerger could not set label, but still continuing.", e);
+      logger.atSevere().withCause(e).log("Automerger could not set label, but still continuing.");
     }
   }
 
@@ -645,7 +652,7 @@
     try {
       gApi.changes().id(change.id).revision(CURRENT).review(reviewInput);
     } catch (AuthException e) {
-      log.error("Automerger could not set label, but still continuing.", e);
+      logger.atSevere().withCause(e).log("Automerger could not set label, but still continuing.");
     }
   }
 
@@ -668,7 +675,7 @@
       mergeInput.strategy = "ours";
       mergePatchSetInput.subject =
           getSubjectForDownstreamMerge(upstreamSubject, newParentRevision, true);
-      log.debug("Skipping merge for {} on {}", newParentRevision, sourceNum);
+      logger.atFine().log("Skipping merge for %s on %s", newParentRevision, sourceNum);
     }
     mergePatchSetInput.merge = mergeInput;
 
@@ -737,7 +744,7 @@
   }
 
   private void abandonChange(Integer changeNumber) throws RestApiException {
-    log.debug("Abandoning change: {}", changeNumber);
+    logger.atFine().log("Abandoning change: %s", changeNumber);
     AbandonInput abandonInput = new AbandonInput();
     abandonInput.notify = NotifyHandling.NONE;
     abandonInput.message = "Merge parent updated; abandoning due to upstream conflict.";
diff --git a/src/main/java/com/googlesource/gerrit/plugins/automerger/ManifestReader.java b/src/main/java/com/googlesource/gerrit/plugins/automerger/ManifestReader.java
index a71e1c0..37b6f92 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/automerger/ManifestReader.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/automerger/ManifestReader.java
@@ -14,6 +14,7 @@
 
 package com.googlesource.gerrit.plugins.automerger;
 
+import com.google.common.flogger.FluentLogger;
 import java.io.IOException;
 import java.io.StringReader;
 import java.util.HashSet;
@@ -21,8 +22,6 @@
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
@@ -32,7 +31,7 @@
 
 /** Class to read a repo manifest. */
 public class ManifestReader {
-  private static final Logger log = LoggerFactory.getLogger(ManifestReader.class);
+  private static final FluentLogger logger = FluentLogger.forEnclosingClass();
 
   private final String manifestString;
   private final String branch;
@@ -79,7 +78,7 @@
       }
 
     } catch (SAXException | ParserConfigurationException | IOException e) {
-      log.error("Exception on manifest for branch {}", branch, e);
+      logger.atSevere().withCause(e).log("Exception on manifest for branch %s", branch);
     }
     return projectSet;
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/automerger/MergeValidator.java b/src/main/java/com/googlesource/gerrit/plugins/automerger/MergeValidator.java
index 6a27eeb..16459a6 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/automerger/MergeValidator.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/automerger/MergeValidator.java
@@ -16,6 +16,7 @@
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Joiner;
+import com.google.common.flogger.FluentLogger;
 import com.google.gerrit.common.data.ParameterizedString;
 import com.google.gerrit.entities.BranchNameKey;
 import com.google.gerrit.entities.PatchSet;
@@ -41,15 +42,13 @@
 import java.util.Set;
 import org.eclipse.jgit.errors.ConfigInvalidException;
 import org.eclipse.jgit.lib.Repository;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * MergeValidator will validate that all downstream changes are uploaded for review before
  * submission.
  */
 public class MergeValidator implements MergeValidationListener {
-  private static final Logger log = LoggerFactory.getLogger(MergeValidator.class);
+  private static final FluentLogger logger = FluentLogger.forEnclosingClass();
 
   protected GerritApi gApi;
   protected ConfigLoader config;
@@ -82,7 +81,7 @@
         | IOException
         | ConfigInvalidException
         | InvalidQueryParameterException e) {
-      log.error("Automerger plugin failed onPreMerge for {}", changeId, e);
+      logger.atSevere().withCause(e).log("Automerger plugin failed onPreMerge for %s", changeId);
       e.printStackTrace();
       throw new MergeValidationException("Error when validating merge for: " + changeId);
     }