Merge "Doc: Fix code example in JS API" into stable-2.14
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/plugins/HttpPluginServlet.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/plugins/HttpPluginServlet.java
index 55fa0cb..b64b3b3 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/plugins/HttpPluginServlet.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/plugins/HttpPluginServlet.java
@@ -190,7 +190,7 @@
       try {
         filter = plugin.getHttpInjector().getInstance(GuiceFilter.class);
       } catch (RuntimeException e) {
-        log.warn(String.format("Plugin %s cannot load GuiceFilter", name), e);
+        log.warn("Plugin {} cannot load GuiceFilter", name, e);
         return null;
       }
 
@@ -198,7 +198,7 @@
         ServletContext ctx = PluginServletContext.create(plugin, wrapper.getFullPath(name));
         filter.init(new WrappedFilterConfig(ctx));
       } catch (ServletException e) {
-        log.warn(String.format("Plugin %s failed to initialize HTTP", name), e);
+        log.warn("Plugin {} failed to initialize HTTP", name, e);
         return null;
       }
 
@@ -429,10 +429,11 @@
               && size.isPresent()) {
             if (size.get() <= 0 || size.get() > SMALL_RESOURCE) {
               log.warn(
-                  String.format(
-                      "Plugin %s: %s omitted from document index. "
-                          + "Size %d out of range (0,%d).",
-                      pluginName, name.substring(prefix.length()), size.get(), SMALL_RESOURCE));
+                  "Plugin {}: {} omitted from document index. Size {} out of range (0,{}).",
+                  pluginName,
+                  name.substring(prefix.length()),
+                  size.get(),
+                  SMALL_RESOURCE);
               return false;
             }
             return true;
@@ -455,9 +456,9 @@
           about = entry;
         } else {
           log.warn(
-              String.format(
-                  "Plugin %s: Multiple 'about' documents found; using %s",
-                  pluginName, about.getName().substring(prefix.length())));
+              "Plugin {}: Multiple 'about' documents found; using {}",
+              pluginName,
+              about.getName().substring(prefix.length()));
         }
       } else {
         docs.add(entry);
@@ -731,9 +732,7 @@
         }
         return def;
       } catch (IOException e) {
-        log.warn(
-            String.format("Error getting %s for plugin %s, using default", attr, plugin.getName()),
-            e);
+        log.warn("Error getting {} for plugin {}, using default", attr, plugin.getName(), e);
         return null;
       }
     }
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/plugins/LfsPluginServlet.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/plugins/LfsPluginServlet.java
index 7e013e6..e13ea95 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/plugins/LfsPluginServlet.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/plugins/LfsPluginServlet.java
@@ -139,7 +139,7 @@
       try {
         guiceFilter = plugin.getHttpInjector().getInstance(GuiceFilter.class);
       } catch (RuntimeException e) {
-        log.warn(String.format("Plugin %s cannot load GuiceFilter", name), e);
+        log.warn("Plugin {} cannot load GuiceFilter", name, e);
         return null;
       }
 
@@ -147,7 +147,7 @@
         ServletContext ctx = PluginServletContext.create(plugin, "/");
         guiceFilter.init(new WrappedFilterConfig(ctx));
       } catch (ServletException e) {
-        log.warn(String.format("Plugin %s failed to initialize HTTP", name), e);
+        log.warn("Plugin {} failed to initialize HTTP", name, e);
         return null;
       }
 
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/plugins/PluginServletContext.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/plugins/PluginServletContext.java
index 53b49a4..8f64d9f 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/plugins/PluginServletContext.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/plugins/PluginServletContext.java
@@ -155,7 +155,7 @@
 
     @Override
     public void log(String msg, Throwable reason) {
-      log.warn(String.format("[plugin %s] %s", plugin.getName(), msg), reason);
+      log.warn("[plugin {}] {}", plugin.getName(), msg, reason);
     }
 
     @Override
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/raw/ResourceServlet.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/raw/ResourceServlet.java
index 2b34f81..3ca1878 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/raw/ResourceServlet.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/raw/ResourceServlet.java
@@ -161,7 +161,7 @@
         r = cache.get(p, newLoader(p));
       }
     } catch (ExecutionException e) {
-      log.warn("Cannot load static resource " + req.getPathInfo(), e);
+      log.warn("Cannot load static resource {}", req.getPathInfo(), e);
       CacheHeaders.setNotCacheable(rsp);
       rsp.setStatus(SC_INTERNAL_SERVER_ERROR);
       return;
@@ -214,12 +214,12 @@
     try {
       Path p = getResourcePath(name);
       if (p == null) {
-        log.warn(String.format("Path doesn't exist %s", name));
+        log.warn("Path doesn't exist {}", name);
         return null;
       }
       return cache.get(p, newLoader(p));
     } catch (ExecutionException | IOException e) {
-      log.warn(String.format("Cannot load static resource %s", name), e);
+      log.warn("Cannot load static resource {}", name, e);
       return null;
     }
   }
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/restapi/RestApiServlet.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/restapi/RestApiServlet.java
index d9dd5d4..bfa91d6 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/restapi/RestApiServlet.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/restapi/RestApiServlet.java
@@ -1094,7 +1094,7 @@
     if (!Strings.isNullOrEmpty(req.getQueryString())) {
       uri += "?" + req.getQueryString();
     }
-    log.error(String.format("Error in %s %s", req.getMethod(), uri), err);
+    log.error("Error in {} {}", req.getMethod(), uri, err);
 
     if (!res.isCommitted()) {
       res.reset();
diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/SwitchSecureStore.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/SwitchSecureStore.java
index 58876ce..1a22162 100644
--- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/SwitchSecureStore.java
+++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/SwitchSecureStore.java
@@ -68,7 +68,7 @@
     SitePaths sitePaths = new SitePaths(getSitePath());
     Path newSecureStorePath = Paths.get(newSecureStoreLib);
     if (!Files.exists(newSecureStorePath)) {
-      log.error(String.format("File %s doesn't exist", newSecureStorePath.toAbsolutePath()));
+      log.error("File {} doesn't exist", newSecureStorePath.toAbsolutePath());
       return -1;
     }
 
@@ -77,8 +77,7 @@
 
     if (currentSecureStoreName.equals(newSecureStore)) {
       log.error(
-          "Old and new SecureStore implementation names "
-              + "are the same. Migration will not work");
+          "Old and new SecureStore implementation names are the same. Migration will not work");
       return -1;
     }
 
diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/http/jetty/HiddenErrorHandler.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/http/jetty/HiddenErrorHandler.java
index 4c2455a..2fbbb97 100644
--- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/http/jetty/HiddenErrorHandler.java
+++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/http/jetty/HiddenErrorHandler.java
@@ -79,7 +79,7 @@
       if (!Strings.isNullOrEmpty(req.getQueryString())) {
         uri += "?" + req.getQueryString();
       }
-      log.error(String.format("Error in %s %s", req.getMethod(), uri), err);
+      log.error("Error in {} {}", req.getMethod(), uri, err);
     }
   }
 }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/WebLinks.java b/gerrit-server/src/main/java/com/google/gerrit/server/WebLinks.java
index 0566804..4ca77bc 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/WebLinks.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/WebLinks.java
@@ -49,7 +49,7 @@
         if (link == null) {
           return false;
         } else if (Strings.isNullOrEmpty(link.name) || Strings.isNullOrEmpty(link.url)) {
-          log.warn(String.format("%s is missing name and/or url", link.getClass().getName()));
+          log.warn("{} is missing name and/or url", link.getClass().getName());
           return false;
         }
         return true;
@@ -60,7 +60,7 @@
         if (link == null) {
           return false;
         } else if (Strings.isNullOrEmpty(link.name) || Strings.isNullOrEmpty(link.url)) {
-          log.warn(String.format("%s is missing name and/or url", link.getClass().getName()));
+          log.warn("{} is missing name and/or url", link.getClass().getName());
           return false;
         }
         return true;
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/GroupCacheImpl.java b/gerrit-server/src/main/java/com/google/gerrit/server/account/GroupCacheImpl.java
index effaa8d..06a4680 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/account/GroupCacheImpl.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/account/GroupCacheImpl.java
@@ -92,7 +92,7 @@
       Optional<AccountGroup> g = byId.get(groupId);
       return g.isPresent() ? g.get() : missing(groupId);
     } catch (ExecutionException e) {
-      log.warn("Cannot load group " + groupId, e);
+      log.warn("Cannot load group {}", groupId, e);
       return missing(groupId);
     }
   }
@@ -131,7 +131,7 @@
     try {
       return byName.get(name.get()).orElse(null);
     } catch (ExecutionException e) {
-      log.warn(String.format("Cannot lookup group %s by name", name.get()), e);
+      log.warn("Cannot lookup group {} by name", name.get(), e);
       return null;
     }
   }
@@ -144,7 +144,7 @@
     try {
       return byUUID.get(uuid.get()).orElse(null);
     } catch (ExecutionException e) {
-      log.warn(String.format("Cannot lookup group %s by uuid", uuid.get()), e);
+      log.warn("Cannot lookup group {} by uuid", uuid.get(), e);
       return null;
     }
   }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/LdapGroupBackend.java b/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/LdapGroupBackend.java
index 7feb745..c748ddc 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/LdapGroupBackend.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/LdapGroupBackend.java
@@ -126,7 +126,7 @@
           return null;
         }
       } catch (ExecutionException e) {
-        log.warn(String.format("Cannot lookup group %s in LDAP", groupDn), e);
+        log.warn("Cannot lookup group {} in LDAP", groupDn, e);
         return null;
       }
     }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/LdapGroupMembership.java b/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/LdapGroupMembership.java
index 7bef2e7..39c8a2f 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/LdapGroupMembership.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/LdapGroupMembership.java
@@ -65,7 +65,7 @@
       try {
         membership = new ListGroupMembership(membershipCache.get(id));
       } catch (ExecutionException e) {
-        LdapGroupBackend.log.warn(String.format("Cannot lookup membershipsOf %s in LDAP", id), e);
+        LdapGroupBackend.log.warn("Cannot lookup membershipsOf {} in LDAP", id, e);
         membership = GroupMembership.EMPTY;
       }
     }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/LdapRealm.java b/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/LdapRealm.java
index 49ff6e8..122d4bc 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/LdapRealm.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/LdapRealm.java
@@ -313,7 +313,7 @@
       Optional<Account.Id> id = usernameCache.get(accountName);
       return id != null ? id.orElse(null) : null;
     } catch (ExecutionException e) {
-      log.warn(String.format("Cannot lookup account %s in LDAP", accountName), e);
+      log.warn("Cannot lookup account {} in LDAP", accountName, e);
       return null;
     }
   }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/AbandonUtil.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/AbandonUtil.java
index 7c408c8..1dd321f 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/AbandonUtil.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/AbandonUtil.java
@@ -96,7 +96,7 @@
           log.error(msg.toString(), e);
         }
       }
-      log.info(String.format("Auto-Abandoned %d of %d changes.", count, changesToAbandon.size()));
+      log.info("Auto-Abandoned {} of {} changes.", count, changesToAbandon.size());
     } catch (QueryParseException | OrmException e) {
       log.error("Failed to query inactive open changes for auto-abandoning.", e);
     }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/events/EventFactory.java b/gerrit-server/src/main/java/com/google/gerrit/server/events/EventFactory.java
index 2584559..5c3da33 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/events/EventFactory.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/events/EventFactory.java
@@ -150,7 +150,7 @@
     try {
       a.commitMessage = changeDataFactory.create(db, change).commitMessage();
     } catch (Exception e) {
-      log.error("Error while getting full commit message for change " + a.number, e);
+      log.error("Error while getting full commit message for change {}", a.number, e);
     }
     a.url = getChangeUrl(change);
     a.owner = asAccountAttribute(change.getOwner());
@@ -498,9 +498,9 @@
       }
       p.kind = changeKindCache.getChangeKind(db, change, patchSet);
     } catch (IOException e) {
-      log.error("Cannot load patch set data for " + patchSet.getId(), e);
+      log.error("Cannot load patch set data for {}", patchSet.getId(), e);
     } catch (PatchListNotAvailableException e) {
-      log.error(String.format("Cannot get size information for %s.", pId), e);
+      log.error("Cannot get size information for {}.", pId, e);
     }
     return p;
   }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/EventUtil.java b/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/EventUtil.java
index 531d95a..57382f6 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/EventUtil.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/EventUtil.java
@@ -118,9 +118,9 @@
   public void logEventListenerError(Object event, Object listener, Exception error) {
     if (log.isDebugEnabled()) {
       log.debug(
-          String.format(
-              "Error in event listener %s for event %s",
-              listener.getClass().getName(), event.getClass().getName()),
+          "Error in event listener {} for event {}",
+          listener.getClass().getName(),
+          event.getClass().getName(),
           error);
     } else {
       log.warn(
@@ -133,7 +133,7 @@
 
   public static void logEventListenerError(Object listener, Exception error) {
     if (log.isDebugEnabled()) {
-      log.debug(String.format("Error in event listener %s", listener.getClass().getName()), error);
+      log.debug("Error in event listener {}", listener.getClass().getName(), error);
     } else {
       log.warn("Error in event listener {}: {}", listener.getClass().getName(), error.getMessage());
     }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/GarbageCollectionRunner.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/GarbageCollectionRunner.java
index ea93f96..4d8a61f 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/GarbageCollectionRunner.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/GarbageCollectionRunner.java
@@ -52,7 +52,7 @@
       if (delay == MISSING_CONFIG && interval == MISSING_CONFIG) {
         log.info("Ignoring missing gc schedule configuration");
       } else if (delay < 0 || interval <= 0) {
-        log.warn(String.format("Ignoring invalid gc schedule configuration: %s", scheduleConfig));
+        log.warn("Ignoring invalid gc schedule configuration: {}", scheduleConfig);
       } else {
         @SuppressWarnings("unused")
         Future<?> possiblyIgnoredError =
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/LocalDiskRepositoryManager.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/LocalDiskRepositoryManager.java
index ca19d47..5f836ae 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/LocalDiskRepositoryManager.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/LocalDiskRepositoryManager.java
@@ -100,7 +100,7 @@
         } else {
           desc = String.format("%d", limit);
         }
-        log.info(String.format("Defaulting core.streamFileThreshold to %s", desc));
+        log.info("Defaulting core.streamFileThreshold to {}", desc);
         cfg.setStreamFileThreshold(limit);
       }
       cfg.install();
@@ -226,9 +226,7 @@
       //
       File metaConfigLog = new File(db.getDirectory(), "logs/" + RefNames.REFS_CONFIG);
       if (!metaConfigLog.getParentFile().mkdirs() || !metaConfigLog.createNewFile()) {
-        log.error(
-            String.format(
-                "Failed to create ref log for %s in repository %s", RefNames.REFS_CONFIG, name));
+        log.error("Failed to create ref log for {} in repository {}", RefNames.REFS_CONFIG, name);
       }
 
       onCreateProject(name);
@@ -304,7 +302,7 @@
           Integer.MAX_VALUE,
           visitor);
     } catch (IOException e) {
-      log.error("Error walking repository tree " + visitor.startFolder.toAbsolutePath(), e);
+      log.error("Error walking repository tree {}", visitor.startFolder.toAbsolutePath(), e);
     }
   }
 
@@ -359,7 +357,7 @@
       Project.NameKey nameKey = getProjectName(startFolder, p);
       if (getBasePath(nameKey).equals(startFolder)) {
         if (isUnreasonableName(nameKey)) {
-          log.warn("Ignoring unreasonably named repository " + p.toAbsolutePath());
+          log.warn("Ignoring unreasonably named repository {}", p.toAbsolutePath());
         } else {
           found.add(nameKey);
         }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java
index e652935..79e3c12 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java
@@ -650,7 +650,7 @@
           try {
             repo.setGitwebDescription(ps.getProject().getDescription());
           } catch (IOException e) {
-            log.warn("cannot update description of " + project.getName(), e);
+            log.warn("cannot update description of {}", project.getName(), e);
           }
         }
 
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/Schema.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/Schema.java
index 5e06242..c7e5755 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/index/Schema.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/Schema.java
@@ -186,7 +186,7 @@
                 try {
                   v = f.get(obj, fillArgs);
                 } catch (OrmException e) {
-                  log.error(String.format("error getting field %s of %s", f.getName(), obj), e);
+                  log.error("error getting field {} of {}", f.getName(), obj, e);
                   return null;
                 }
                 if (v == null) {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/change/StalenessChecker.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/change/StalenessChecker.java
index 872dfaf..0c43c85 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/index/change/StalenessChecker.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/change/StalenessChecker.java
@@ -206,7 +206,7 @@
       }
       return false;
     } catch (IOException e) {
-      log.warn(String.format("error checking staleness of %s in %s", id, project), e);
+      log.warn("error checking staleness of {} in {}", id, project, e);
       return true;
     }
   }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/receive/MailProcessor.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/receive/MailProcessor.java
index accf7ba..07cbc20 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/receive/MailProcessor.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/receive/MailProcessor.java
@@ -128,9 +128,10 @@
     for (DynamicMap.Entry<MailFilter> filter : mailFilters) {
       if (!filter.getProvider().get().shouldProcessMessage(message)) {
         log.warn(
-            String.format(
-                "Message %s filtered by plugin %s %s. Will delete message.",
-                message.id(), filter.getPluginName(), filter.getExportName()));
+            "Message {} filtered by plugin {} {}. Will delete message.",
+            message.id(),
+            filter.getPluginName(),
+            filter.getExportName());
         return;
       }
     }
@@ -138,23 +139,24 @@
     MailMetadata metadata = MetadataParser.parse(message);
     if (!metadata.hasRequiredFields()) {
       log.error(
-          String.format(
-              "Message %s is missing required metadata, have %s. Will delete message.",
-              message.id(), metadata));
+          "Message {} is missing required metadata, have {}. Will delete message.",
+          message.id(),
+          metadata);
       return;
     }
 
     Set<Account.Id> accounts = accountByEmailCache.get(metadata.author);
     if (accounts.size() != 1) {
       log.error(
-          String.format(
-              "Address %s could not be matched to a unique account. It was matched to %s. Will delete message.",
-              metadata.author, accounts));
+          "Address {} could not be matched to a unique account. It was matched to {}."
+              + " Will delete message.",
+          metadata.author,
+          accounts);
       return;
     }
     Account.Id account = accounts.iterator().next();
     if (!accountCache.get(account).getAccount().isActive()) {
-      log.warn(String.format("Mail: Account %s is inactive. Will delete message.", account));
+      log.warn("Mail: Account {} is inactive. Will delete message.", account);
       return;
     }
 
@@ -163,14 +165,16 @@
           queryProvider.get().byLegacyChangeId(new Change.Id(metadata.changeNumber));
       if (changeDataList.size() != 1) {
         log.error(
-            String.format(
-                "Message %s references unique change %s, but there are %d matching changes in the index. Will delete message.",
-                message.id(), metadata.changeNumber, changeDataList.size()));
+            "Message {} references unique change {}, but there are {} matching changes in "
+                + "the index. Will delete message.",
+            message.id(),
+            metadata.changeNumber,
+            changeDataList.size());
         return;
       }
       ChangeData cd = changeDataList.get(0);
       if (existingMessageIds(cd).contains(message.id())) {
-        log.info("Message " + message.id() + " was already processed. Will delete message.");
+        log.info("Message {} was already processed. Will delete message.", message.id());
         return;
       }
       // Get all comments; filter and sort them to get the original list of
@@ -193,7 +197,7 @@
       }
 
       if (parsedComments.isEmpty()) {
-        log.warn("Could not parse any comments from " + message.id() + ". Will delete message.");
+        log.warn("Could not parse any comments from {}. Will delete message.", message.id());
         return;
       }
 
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/send/CommentSender.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/send/CommentSender.java
index b572e8d..d3c456c 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/send/CommentSender.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/send/CommentSender.java
@@ -254,11 +254,10 @@
             currentGroup.fileData = new PatchFile(repo, patchList, c.key.filename);
           } catch (IOException e) {
             log.warn(
-                String.format(
-                    "Cannot load %s from %s in %s",
-                    c.key.filename,
-                    patchList.getNewId().name(),
-                    projectState.getProject().getName()),
+                "Cannot load {} from {} in {}",
+                c.key.filename,
+                patchList.getNewId().name(),
+                projectState.getProject().getName(),
                 e);
             currentGroup.fileData = null;
           }
@@ -352,10 +351,10 @@
       maxLines = currentFileData.getLineCount(side);
     } catch (IOException err) {
       // The file could not be read, leave the max as is.
-      log.warn(String.format("Failed to read file %s on side %d", comment.key.filename, side), err);
+      log.warn("Failed to read file {} on side {}", comment.key.filename, side, err);
     } catch (NoSuchEntityException err) {
       // The file could not be read, leave the max as is.
-      log.warn(String.format("Side %d of file %s didn't exist", side, comment.key.filename), err);
+      log.warn("Side {} of file {} didn't exist", side, comment.key.filename, err);
     }
 
     int startLine = Math.max(1, lineNbr - contextLines + 1);
@@ -404,7 +403,7 @@
     try {
       return commentsUtil.get(args.db.get(), changeData.notes(), key);
     } catch (OrmException e) {
-      log.warn("Could not find the parent of this comment: " + child.toString());
+      log.warn("Could not find the parent of this comment: {}", child.toString());
       return Optional.empty();
     }
   }
@@ -595,16 +594,16 @@
       return fileInfo.getLine(side, lineNbr);
     } catch (IOException err) {
       // Default to the empty string if the file cannot be safely read.
-      log.warn(String.format("Failed to read file on side %d", side), err);
+      log.warn("Failed to read file on side {}", side, err);
       return "";
     } catch (IndexOutOfBoundsException err) {
       // Default to the empty string if the given line number does not appear
       // in the file.
-      log.debug(String.format("Failed to get line number of file on side %d", side), err);
+      log.debug("Failed to get line number of file on side {}", side, err);
       return "";
     } catch (NoSuchEntityException err) {
       // Default to the empty string if the side cannot be found.
-      log.warn(String.format("Side %d of file didn't exist", side), err);
+      log.warn("Side {} of file didn't exist", side, err);
       return "";
     }
   }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotes.java b/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotes.java
index d35fd12..d821a78 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotes.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotes.java
@@ -140,7 +140,7 @@
         throw new NoSuchChangeException(changeId);
       }
       if (changes.size() != 1) {
-        log.error(String.format("Multiple changes found for %d", changeId.get()));
+        log.error("Multiple changes found for {}", changeId.get());
         throw new NoSuchChangeException(changeId);
       }
       return changes.get(0).notes();
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/plugins/JarPluginProvider.java b/gerrit-server/src/main/java/com/google/gerrit/server/plugins/JarPluginProvider.java
index 06a1a68..b10d8ab 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/plugins/JarPluginProvider.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/plugins/JarPluginProvider.java
@@ -131,7 +131,7 @@
       if (overlay != null) {
         Path classes = Paths.get(overlay).resolve(name).resolve("main");
         if (Files.isDirectory(classes)) {
-          log.info(String.format("plugin %s: including %s", name, classes));
+          log.info("plugin {}: including {}", name, classes);
           urls.add(classes.toUri().toURL());
         }
       }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/plugins/PluginLoader.java b/gerrit-server/src/main/java/com/google/gerrit/server/plugins/PluginLoader.java
index 9b37bad..c99b797 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/plugins/PluginLoader.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/plugins/PluginLoader.java
@@ -195,9 +195,9 @@
     String name = MoreObjects.firstNonNull(getGerritPluginName(tmp), nameOf(fileName));
     if (!originalName.equals(name)) {
       log.warn(
-          String.format(
-              "Plugin provides its own name: <%s>, use it instead of the input name: <%s>",
-              name, originalName));
+          "Plugin provides its own name: <{}>, use it instead of the input name: <{}>",
+          name,
+          originalName);
     }
 
     String fileExtension = getExtension(fileName);
@@ -206,7 +206,7 @@
       Plugin active = running.get(name);
       if (active != null) {
         fileName = active.getSrcFile().getFileName().toString();
-        log.info(String.format("Replacing plugin %s", active.getName()));
+        log.info("Replacing plugin {}", active.getName());
         Path old = pluginsDir.resolve(".last_" + fileName);
         Files.deleteIfExists(old);
         Files.move(active.getSrcFile(), old);
@@ -217,7 +217,7 @@
       try {
         Plugin plugin = runPlugin(name, dst, active);
         if (active == null) {
-          log.info(String.format("Installed plugin %s", plugin.getName()));
+          log.info("Installed plugin {}", plugin.getName());
         }
       } catch (PluginInstallException e) {
         Files.deleteIfExists(dst);
@@ -247,7 +247,7 @@
   private synchronized void unloadPlugin(Plugin plugin) {
     persistentCacheFactory.onStop(plugin);
     String name = plugin.getName();
-    log.info(String.format("Unloading plugin %s, version %s", name, plugin.getVersion()));
+    log.info("Unloading plugin {}, version {}", name, plugin.getVersion());
     plugin.stop(env);
     env.onStopPlugin(plugin);
     running.remove(name);
@@ -257,7 +257,7 @@
 
   public void disablePlugins(Set<String> names) {
     if (!isRemoteAdminEnabled()) {
-      log.warn("Remote plugin administration is disabled, ignoring disablePlugins(" + names + ")");
+      log.warn("Remote plugin administration is disabled, ignoring disablePlugins({})", names);
       return;
     }
 
@@ -268,7 +268,7 @@
           continue;
         }
 
-        log.info(String.format("Disabling plugin %s", active.getName()));
+        log.info("Disabling plugin {}", active.getName());
         Path off =
             active.getSrcFile().resolveSibling(active.getSrcFile().getFileName() + ".disabled");
         try {
@@ -288,7 +288,7 @@
           disabled.put(name, offPlugin);
         } catch (Throwable e) {
           // This shouldn't happen, as the plugin was loaded earlier.
-          log.warn(String.format("Cannot load disabled plugin %s", active.getName()), e.getCause());
+          log.warn("Cannot load disabled plugin {}", active.getName(), e.getCause());
         }
       }
       cleanInBackground();
@@ -297,7 +297,7 @@
 
   public void enablePlugins(Set<String> names) throws PluginInstallException {
     if (!isRemoteAdminEnabled()) {
-      log.warn("Remote plugin administration is disabled, ignoring enablePlugins(" + names + ")");
+      log.warn("Remote plugin administration is disabled, ignoring enablePlugins({})", names);
       return;
     }
 
@@ -308,7 +308,7 @@
           continue;
         }
 
-        log.info(String.format("Enabling plugin %s", name));
+        log.info("Enabling plugin {}", name);
         String n = off.getSrcFile().toFile().getName();
         if (n.endsWith(".disabled")) {
           n = n.substring(0, n.lastIndexOf('.'));
@@ -317,7 +317,7 @@
         try {
           Files.move(off.getSrcFile(), on);
         } catch (IOException e) {
-          log.error("Failed to move plugin " + name + " into place", e);
+          log.error("Failed to move plugin {} into place", name, e);
           continue;
         }
         disabled.remove(name);
@@ -337,25 +337,23 @@
         };
     try (DirectoryStream<Path> files = Files.newDirectoryStream(tempDir, filter)) {
       for (Path file : files) {
-        log.info("Removing stale plugin file: " + file.toFile().getName());
+        log.info("Removing stale plugin file: {}", file.toFile().getName());
         try {
           Files.delete(file);
         } catch (IOException e) {
           log.error(
-              String.format(
-                  "Failed to remove stale plugin file %s: %s",
-                  file.toFile().getName(), e.getMessage()));
+              "Failed to remove stale plugin file {}: {}", file.toFile().getName(), e.getMessage());
         }
       }
     } catch (IOException e) {
-      log.warn("Unable to discover stale plugin files: " + e.getMessage());
+      log.warn("Unable to discover stale plugin files: {}", e.getMessage());
     }
   }
 
   @Override
   public synchronized void start() {
     removeStalePluginFiles();
-    log.info("Loading plugins from " + pluginsDir.toAbsolutePath());
+    log.info("Loading plugins from {}", pluginsDir.toAbsolutePath());
     srvInfoImpl.state = ServerInformation.State.STARTUP;
     rescan();
     srvInfoImpl.state = ServerInformation.State.RUNNING;
@@ -404,13 +402,11 @@
       for (Plugin active : reload) {
         String name = active.getName();
         try {
-          log.info(String.format("Reloading plugin %s", name));
+          log.info("Reloading plugin {}", name);
           Plugin newPlugin = runPlugin(name, active.getSrcFile(), active);
-          log.info(
-              String.format(
-                  "Reloaded plugin %s, version %s", newPlugin.getName(), newPlugin.getVersion()));
+          log.info("Reloaded plugin {}, version {}", newPlugin.getName(), newPlugin.getVersion());
         } catch (PluginInstallException e) {
-          log.warn(String.format("Cannot reload plugin %s", name), e.getCause());
+          log.warn("Cannot reload plugin {}", name, e.getCause());
           throw e;
         }
       }
@@ -448,21 +444,20 @@
       }
 
       if (active != null) {
-        log.info(String.format("Reloading plugin %s", active.getName()));
+        log.info("Reloading plugin {}", active.getName());
       }
 
       try {
         Plugin loadedPlugin = runPlugin(name, path, active);
         if (!loadedPlugin.isDisabled()) {
           log.info(
-              String.format(
-                  "%s plugin %s, version %s",
-                  active == null ? "Loaded" : "Reloaded",
-                  loadedPlugin.getName(),
-                  loadedPlugin.getVersion()));
+              "{} plugin {}, version {}",
+              active == null ? "Loaded" : "Reloaded",
+              loadedPlugin.getName(),
+              loadedPlugin.getVersion());
         }
       } catch (PluginInstallException e) {
-        log.warn(String.format("Cannot load plugin %s", name), e.getCause());
+        log.warn("Cannot load plugin {}", name, e.getCause());
       }
     }
 
@@ -716,18 +711,19 @@
       Collection<Path> elementsToAdd = new ArrayList<>();
       for (Path loser : Iterables.skip(enabled, 1)) {
         log.warn(
-            String.format(
-                "Plugin <%s> was disabled, because"
-                    + " another plugin <%s>"
-                    + " with the same name <%s> already exists",
-                loser, winner, plugin));
+            "Plugin <{}> was disabled, because"
+                + " another plugin <{}>"
+                + " with the same name <{}> already exists",
+            loser,
+            winner,
+            plugin);
         Path disabledPlugin = Paths.get(loser + ".disabled");
         elementsToAdd.add(disabledPlugin);
         elementsToRemove.add(loser);
         try {
           Files.move(loser, disabledPlugin);
         } catch (IOException e) {
-          log.warn("Failed to fully disable plugin " + loser, e);
+          log.warn("Failed to fully disable plugin {}", loser, e);
         }
       }
       Iterables.removeAll(files, elementsToRemove);
@@ -740,7 +736,7 @@
     try {
       return listPlugins(pluginsDir);
     } catch (IOException e) {
-      log.error("Cannot list " + pluginsDir.toAbsolutePath(), e);
+      log.error("Cannot list {}", pluginsDir.toAbsolutePath(), e);
       return ImmutableList.of();
     }
   }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/PutConfig.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/PutConfig.java
index 59e0044..2132ef4 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/project/PutConfig.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/PutConfig.java
@@ -168,7 +168,7 @@
           throw new ResourceConflictException(
               "Cannot update " + projectName + ": " + e.getCause().getMessage());
         }
-        log.warn(String.format("Failed to update config of project %s.", projectName), e);
+        log.warn("Failed to update config of project {}.", projectName, e);
         throw new ResourceConflictException("Cannot update " + projectName);
       }
 
@@ -202,9 +202,7 @@
         ProjectConfigEntry projectConfigEntry = pluginConfigEntries.get(pluginName, v.getKey());
         if (projectConfigEntry != null) {
           if (!isValidParameterName(v.getKey())) {
-            log.warn(
-                String.format(
-                    "Parameter name '%s' must match '^[a-zA-Z0-9]+[a-zA-Z0-9-]*$'", v.getKey()));
+            log.warn("Parameter name '{}' must match '^[a-zA-Z0-9]+[a-zA-Z0-9-]*$'", v.getKey());
             continue;
           }
           String oldValue = cfg.getString(v.getKey());
@@ -253,9 +251,9 @@
                     break;
                   default:
                     log.warn(
-                        String.format(
-                            "The type '%s' of parameter '%s' is not supported.",
-                            projectConfigEntry.getType().name(), v.getKey()));
+                        "The type '{}' of parameter '{}' is not supported.",
+                        projectConfigEntry.getType().name(),
+                        v.getKey());
                 }
               } catch (NumberFormatException ex) {
                 throw new BadRequestException(
diff --git a/plugins/download-commands b/plugins/download-commands
index b88b58b..d2f0920 160000
--- a/plugins/download-commands
+++ b/plugins/download-commands
@@ -1 +1 @@
-Subproject commit b88b58b670be36f332285e1818695ac45b5be5b3
+Subproject commit d2f0920fac4838da70e83a03237ab97413960ec6
diff --git a/plugins/reviewnotes b/plugins/reviewnotes
index 7070ce2..72a0860 160000
--- a/plugins/reviewnotes
+++ b/plugins/reviewnotes
@@ -1 +1 @@
-Subproject commit 7070ce225267cd024d0a2f06d0c03f8011774def
+Subproject commit 72a086028fbfb3e597276f2a2984534965645883