From 2b81d71374fd61937f41a02ce16dbf6484ff3006 Mon Sep 17 00:00:00 2001 From: Edwin Kempin Date: Tue, 8 May 2018 11:41:55 +0200 Subject: [PATCH 1/9] Add dependency to Flogger Flogger is an open source project (Apache 2 License) from Google that provides a fluent JAVA API for logging: * https://github.com/google/flogger * https://google.github.io/flogger/ We want to use Flogger instead of slf4j. This idea was discussed at the Gerrit hackathon in Lund [1] and on the mailing list [2]. Benefits: * Better Readability * Better Performance * Will allow us to implement request tracing Flogger API examples: * logger.atSevere() .withCause(err) .log("Error in %s %s", req.getMethod(), uri); * logger.atInfo() .atMostEvery(1, TimeUnit.HOURS) .log(...) * logger.atInfo() .withStackTrace(StackSize.FULL) .log(...) Within Google Flogger is long-established and is used by almost 3/4 of all Google's Java projects, hence this library is very mature. The Flogger API can be used with different logging backends. We are using the log4j backend, as we are currently using log4j as backend with slf4j. This means there are no changes to how logs are configured (existing log4j.properties and log4j.xml files continue to work). It also means that this doesn't effect any integrations that work with log4j (e.g. integration with logstash continues to work). To use the log4j backend for Flogger the system property 'flogger.backend_factory' must be set to 'com.google.common.flogger.backend.log4j.Log4jBackendFactory#getInstance'. E.g. this system property may be set in gerrit.config: [container] javaOptions = "-Dflogger.backend_factory=com.google.common.flogger.backend.log4j.Log4jBackendFactory#getInstance" If this property is not set Gerrit sets it automatically on startup so that we always have a proper logging configuration. We do this in Main.java before loading any class. This is important since Flogger reads this system property only once when the FluentLogger class is loaded and we must be sure that the system property was set before this. Using Flogger and slf4j in parallel is not a problem. Logs from both APIs end up in the same log file(s). This change doesn't migrate any classes to Flogger yet. This will be done by follow-up changes. JGit is still using slf4j and needs an explicit runtime dependency on slf4j. [1] https://docs.google.com/presentation/d/1Kwn77c1PScMLDEWiJDklEm43NsN2-mWm2PqHwYTkJfI/edit?usp=sharing [2] https://groups.google.com/d/msg/repo-discuss/meEWJO7c4pA/fxDx2waRCQAJ Change-Id: Ifc31fb95c10397857e8de5657c729f49c1820ec4 Signed-off-by: Edwin Kempin --- WORKSPACE | 20 ++++++++++++++++++++ java/Main.java | 15 +++++++++++++++ java/com/google/gerrit/pgm/util/BUILD | 1 + lib/flogger/BUILD | 10 ++++++++++ lib/jgit/org.eclipse.jgit/BUILD | 5 ++++- 5 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 lib/flogger/BUILD diff --git a/WORKSPACE b/WORKSPACE index 5de2ec2332..ef9e9f6069 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -171,6 +171,26 @@ maven_jar( sha1 = "94ad16d728b374d65bd897625f3fbb3da223a2b6", ) +FLOGGER_VERS = "0.2" + +maven_jar( + name = "flogger", + artifact = "com.google.flogger:flogger:" + FLOGGER_VERS, + sha1 = "a22d04ed3b84bae8ecf8aa6d4430ad000bcdf7b4", +) + +maven_jar( + name = "flogger-log4j-backend", + artifact = "com.google.flogger:flogger-log4j-backend:" + FLOGGER_VERS, + sha1 = "d5085e3996bddc4b105d53b886190cc9a8811a9e", +) + +maven_jar( + name = "flogger-system-backend", + artifact = "com.google.flogger:flogger-system-backend:" + FLOGGER_VERS, + sha1 = "b995c84b8443d6cfbd011a55719b63494b974c3a", +) + maven_jar( name = "gwtjsonrpc", artifact = "com.google.gerrit:gwtjsonrpc:1.11", diff --git a/java/Main.java b/java/Main.java index 0eca665f8f..f26b6dfa8c 100644 --- a/java/Main.java +++ b/java/Main.java @@ -13,6 +13,8 @@ // limitations under the License. public final class Main { + private static final String FLOGGER_BACKEND_PROPERTY = "flogger.backend_factory"; + // We don't do any real work here because we need to import // the archive lookup code and we cannot import a class in // the default package. So this is just a tiny springboard @@ -21,6 +23,7 @@ public final class Main { public static void main(String[] argv) throws Exception { if (onSupportedJavaVersion()) { + configureFloggerBackend(); com.google.gerrit.launcher.GerritLauncher.main(argv); } else { @@ -38,6 +41,18 @@ public final class Main { return false; } + private static void configureFloggerBackend() { + if (System.getProperty(FLOGGER_BACKEND_PROPERTY) != null) { + // Flogger backend is already configured + return; + } + + // Configure log4j backend + System.setProperty( + FLOGGER_BACKEND_PROPERTY, + "com.google.common.flogger.backend.log4j.Log4jBackendFactory#getInstance"); + } + private static double parse(String version) { if (version == null || version.length() == 0) { return 0.0; diff --git a/java/com/google/gerrit/pgm/util/BUILD b/java/com/google/gerrit/pgm/util/BUILD index 91647fbc83..8f3bd4b273 100644 --- a/java/com/google/gerrit/pgm/util/BUILD +++ b/java/com/google/gerrit/pgm/util/BUILD @@ -21,6 +21,7 @@ java_library( "//lib:guava", "//lib:gwtorm", "//lib/commons:dbcp", + "//lib/flogger:api", "//lib/guice", "//lib/jgit/org.eclipse.jgit:jgit", "//lib/log:api", diff --git a/lib/flogger/BUILD b/lib/flogger/BUILD new file mode 100644 index 0000000000..c41e12f224 --- /dev/null +++ b/lib/flogger/BUILD @@ -0,0 +1,10 @@ +java_library( + name = "api", + data = ["//lib:LICENSE-Apache2.0"], + visibility = ["//visibility:public"], + exports = [ + "@flogger-log4j-backend//jar", + "@flogger-system-backend//jar", + "@flogger//jar", + ], +) diff --git a/lib/jgit/org.eclipse.jgit/BUILD b/lib/jgit/org.eclipse.jgit/BUILD index 5586cb10f3..caf8eecf10 100644 --- a/lib/jgit/org.eclipse.jgit/BUILD +++ b/lib/jgit/org.eclipse.jgit/BUILD @@ -5,7 +5,10 @@ java_library( data = ["//lib:LICENSE-jgit"], visibility = ["//visibility:public"], exports = [jgit_dep("@jgit_lib//jar")], - runtime_deps = [":javaewah"], + runtime_deps = [ + ":javaewah", + "//lib/log:api", + ], ) alias( From 03d2d209b181fa02868b445da75d2e6b7c08a7bf Mon Sep 17 00:00:00 2001 From: Edwin Kempin Date: Mon, 30 Apr 2018 16:29:35 +0200 Subject: [PATCH 2/9] Migrate httpd classes to Flogger This is the first part of the migration to Flogger. This change migrates all classes of the 'http' module to Flogger. Other modules continue to use slf4j. They should be migrated by follow-up changes. During this migration we try to make the log statements more consistent: - avoid string concatenation - avoid usage of String.format(...) Change-Id: I473c41733b00aa1ceab92fe0dc8cd1c6b347174c Signed-off-by: Edwin Kempin --- java/com/google/gerrit/httpd/BUILD | 2 +- .../gerrit/httpd/DirectChangeByCommit.java | 8 +-- .../httpd/HttpServletResponseRecorder.java | 7 +-- .../gerrit/httpd/ProjectBasicAuthFilter.java | 29 ++++----- .../gerrit/httpd/ProjectOAuthFilter.java | 16 ++--- .../httpd/QueryDocumentationFilter.java | 7 +-- java/com/google/gerrit/httpd/RunAsFilter.java | 9 ++- .../gerrit/httpd/WebSessionManager.java | 12 ++-- .../auth/container/HttpLoginServlet.java | 34 +++++----- .../HttpsClientSslCertAuthFilter.java | 7 +-- .../httpd/auth/ldap/LdapLoginServlet.java | 11 ++-- java/com/google/gerrit/httpd/auth/oauth/BUILD | 2 +- .../gerrit/httpd/auth/oauth/OAuthSession.java | 63 +++++++++---------- .../com/google/gerrit/httpd/auth/openid/BUILD | 2 +- .../gerrit/httpd/auth/openid/LoginForm.java | 14 ++--- .../auth/openid/OAuthSessionOverOpenID.java | 63 +++++++++---------- .../httpd/auth/openid/OpenIdServiceImpl.java | 52 +++++++-------- .../gerrit/httpd/gitweb/GitwebServlet.java | 19 +++--- java/com/google/gerrit/httpd/init/BUILD | 2 +- .../gerrit/httpd/init/SiteInitializer.java | 11 ++-- .../gerrit/httpd/init/WebAppInitializer.java | 7 +-- .../httpd/plugins/HttpPluginServlet.java | 36 ++++++----- .../httpd/plugins/LfsPluginServlet.java | 11 ++-- .../httpd/plugins/PluginServletContext.java | 7 +-- .../google/gerrit/httpd/raw/BazelBuild.java | 11 ++-- .../gerrit/httpd/raw/HostPageServlet.java | 11 ++-- .../gerrit/httpd/raw/ResourceServlet.java | 11 ++-- .../google/gerrit/httpd/raw/StaticModule.java | 7 +-- .../gerrit/httpd/restapi/RestApiServlet.java | 8 +-- .../gerrit/httpd/rpc/GerritJsonServlet.java | 18 +++--- .../httpd/rpc/SystemInfoServiceImpl.java | 7 +-- .../httpd/template/SiteHeaderFooter.java | 9 ++- 32 files changed, 245 insertions(+), 268 deletions(-) diff --git a/java/com/google/gerrit/httpd/BUILD b/java/com/google/gerrit/httpd/BUILD index d4045dd4b9..4bd3e2e2aa 100644 --- a/java/com/google/gerrit/httpd/BUILD +++ b/java/com/google/gerrit/httpd/BUILD @@ -33,11 +33,11 @@ java_library( "//lib/auto:auto-value-annotations", "//lib/commons:codec", "//lib/commons:lang", + "//lib/flogger:api", "//lib/guice", "//lib/guice:guice-assistedinject", "//lib/guice:guice-servlet", "//lib/jgit/org.eclipse.jgit.http.server:jgit-servlet", "//lib/jgit/org.eclipse.jgit:jgit", - "//lib/log:api", ], ) diff --git a/java/com/google/gerrit/httpd/DirectChangeByCommit.java b/java/com/google/gerrit/httpd/DirectChangeByCommit.java index 26e41987ab..152a83d1a2 100644 --- a/java/com/google/gerrit/httpd/DirectChangeByCommit.java +++ b/java/com/google/gerrit/httpd/DirectChangeByCommit.java @@ -4,6 +4,7 @@ package com.google.gerrit.httpd; import com.google.common.base.CharMatcher; import com.google.common.collect.ImmutableList; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.PageLinks; import com.google.gerrit.extensions.api.changes.Changes; import com.google.gerrit.extensions.common.ChangeInfo; @@ -17,13 +18,12 @@ import java.util.List; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton class DirectChangeByCommit extends HttpServlet { private static final long serialVersionUID = 1L; - private static final Logger log = LoggerFactory.getLogger(DirectChangeByCommit.class); + + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final Changes changes; @@ -39,7 +39,7 @@ class DirectChangeByCommit extends HttpServlet { try { results = changes.query(query).withLimit(2).get(); } catch (RestApiException e) { - log.warn("Cannot process query by URL: /r/" + query, e); + logger.atWarning().withCause(e).log("Cannot process query by URL: /r/%s", query); results = ImmutableList.of(); } String token; diff --git a/java/com/google/gerrit/httpd/HttpServletResponseRecorder.java b/java/com/google/gerrit/httpd/HttpServletResponseRecorder.java index 6774ec8030..397d093267 100644 --- a/java/com/google/gerrit/httpd/HttpServletResponseRecorder.java +++ b/java/com/google/gerrit/httpd/HttpServletResponseRecorder.java @@ -14,13 +14,12 @@ package com.google.gerrit.httpd; +import com.google.common.flogger.FluentLogger; import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * HttpServletResponse wrapper to allow response status code override. @@ -29,7 +28,7 @@ import org.slf4j.LoggerFactory; * override the response http status code. */ public class HttpServletResponseRecorder extends HttpServletResponseWrapper { - private static final Logger log = LoggerFactory.getLogger(HttpServletResponseRecorder.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final String LOCATION_HEADER = "Location"; private int status; @@ -78,7 +77,7 @@ public class HttpServletResponseRecorder extends HttpServletResponseWrapper { void play() throws IOException { if (status != 0) { - log.debug("Replaying {} {}", status, statusMsg); + logger.atFine().log("Replaying %s %s", status, statusMsg); if (status == SC_MOVED_TEMPORARILY) { super.sendRedirect(headers.get(LOCATION_HEADER)); diff --git a/java/com/google/gerrit/httpd/ProjectBasicAuthFilter.java b/java/com/google/gerrit/httpd/ProjectBasicAuthFilter.java index 6174644013..e7b35ec9f7 100644 --- a/java/com/google/gerrit/httpd/ProjectBasicAuthFilter.java +++ b/java/com/google/gerrit/httpd/ProjectBasicAuthFilter.java @@ -19,6 +19,7 @@ import static javax.servlet.http.HttpServletResponse.SC_UNAUTHORIZED; import com.google.common.base.MoreObjects; import com.google.common.base.Strings; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.client.GitBasicAuthPolicy; import com.google.gerrit.extensions.registration.DynamicItem; import com.google.gerrit.reviewdb.client.Account; @@ -47,8 +48,6 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper; import org.apache.commons.codec.binary.Base64; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Authenticates the current user by HTTP basic authentication. @@ -62,7 +61,7 @@ import org.slf4j.LoggerFactory; */ @Singleton class ProjectBasicAuthFilter implements Filter { - private static final Logger log = LoggerFactory.getLogger(ProjectBasicAuthFilter.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static final String REALM_NAME = "Gerrit Code Review"; private static final String AUTHORIZATION = "Authorization"; @@ -131,10 +130,11 @@ class ProjectBasicAuthFilter implements Filter { Optional accountState = accountCache.getByUsername(username).filter(a -> a.getAccount().isActive()); if (!accountState.isPresent()) { - log.warn( - "Authentication failed for " - + username - + ": account inactive or not provisioned in Gerrit"); + logger + .atWarning() + .log( + "Authentication failed for %s: account inactive or not provisioned in Gerrit", + username); rsp.sendError(SC_UNAUTHORIZED); return false; } @@ -163,17 +163,17 @@ class ProjectBasicAuthFilter implements Filter { if (who.checkPassword(password, username)) { return succeedAuthentication(who); } - log.warn(authenticationFailedMsg(username, req), e); + logger.atWarning().withCause(e).log(authenticationFailedMsg(username, req)); rsp.sendError(SC_UNAUTHORIZED); return false; } catch (AuthenticationFailedException e) { // This exception is thrown if the user provided wrong credentials, we don't need to log a // stacktrace for it. - log.warn(authenticationFailedMsg(username, req) + ": " + e.getMessage()); + logger.atWarning().log(authenticationFailedMsg(username, req) + ": %s", e.getMessage()); rsp.sendError(SC_UNAUTHORIZED); return false; } catch (AccountException e) { - log.warn(authenticationFailedMsg(username, req), e); + logger.atWarning().withCause(e).log(authenticationFailedMsg(username, req)); rsp.sendError(SC_UNAUTHORIZED); return false; } @@ -186,10 +186,11 @@ class ProjectBasicAuthFilter implements Filter { private boolean failAuthentication(Response rsp, String username, HttpServletRequest req) throws IOException { - log.warn( - authenticationFailedMsg(username, req) - + ": password does not match the one stored in Gerrit", - username); + logger + .atWarning() + .log( + authenticationFailedMsg(username, req) + + ": password does not match the one stored in Gerrit"); rsp.sendError(SC_UNAUTHORIZED); return false; } diff --git a/java/com/google/gerrit/httpd/ProjectOAuthFilter.java b/java/com/google/gerrit/httpd/ProjectOAuthFilter.java index 2b37378e08..c97c840835 100644 --- a/java/com/google/gerrit/httpd/ProjectOAuthFilter.java +++ b/java/com/google/gerrit/httpd/ProjectOAuthFilter.java @@ -21,6 +21,7 @@ import static javax.servlet.http.HttpServletResponse.SC_UNAUTHORIZED; import com.google.common.base.MoreObjects; import com.google.common.base.Strings; import com.google.common.collect.Iterables; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.auth.oauth.OAuthLoginProvider; import com.google.gerrit.extensions.registration.DynamicItem; import com.google.gerrit.extensions.registration.DynamicMap; @@ -54,8 +55,6 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper; import org.apache.commons.codec.binary.Base64; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Authenticates the current user with an OAuth2 server. @@ -64,8 +63,7 @@ import org.slf4j.LoggerFactory; */ @Singleton class ProjectOAuthFilter implements Filter { - - private static final Logger log = LoggerFactory.getLogger(ProjectOAuthFilter.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final String REALM_NAME = "Gerrit Code Review"; private static final String AUTHORIZATION = "Authorization"; @@ -156,9 +154,11 @@ class ProjectOAuthFilter implements Filter { Optional who = accountCache.getByUsername(authInfo.username).filter(a -> a.getAccount().isActive()); if (!who.isPresent()) { - log.warn( - authenticationFailedMsg(authInfo.username, req) - + ": account inactive or not provisioned in Gerrit"); + logger + .atWarning() + .log( + authenticationFailedMsg(authInfo.username, req) + + ": account inactive or not provisioned in Gerrit"); rsp.sendError(SC_UNAUTHORIZED); return false; } @@ -179,7 +179,7 @@ class ProjectOAuthFilter implements Filter { ws.setAccessPathOk(AccessPath.REST_API, true); return true; } catch (AccountException e) { - log.warn(authenticationFailedMsg(authInfo.username, req), e); + logger.atWarning().withCause(e).log(authenticationFailedMsg(authInfo.username, req)); rsp.sendError(SC_UNAUTHORIZED); return false; } diff --git a/java/com/google/gerrit/httpd/QueryDocumentationFilter.java b/java/com/google/gerrit/httpd/QueryDocumentationFilter.java index 7a89b3bba6..8b82c001ef 100644 --- a/java/com/google/gerrit/httpd/QueryDocumentationFilter.java +++ b/java/com/google/gerrit/httpd/QueryDocumentationFilter.java @@ -16,6 +16,7 @@ package com.google.gerrit.httpd; import com.google.common.base.Strings; import com.google.common.collect.ImmutableListMultimap; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.httpd.restapi.RestApiServlet; import com.google.gerrit.server.documentation.QueryDocumentationExecutor; import com.google.gerrit.server.documentation.QueryDocumentationExecutor.DocQueryException; @@ -32,12 +33,10 @@ import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class QueryDocumentationFilter implements Filter { - private final Logger log = LoggerFactory.getLogger(QueryDocumentationFilter.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final QueryDocumentationExecutor searcher; @@ -62,7 +61,7 @@ public class QueryDocumentationFilter implements Filter { List result = searcher.doQuery(request.getParameter("q")); RestApiServlet.replyJson(req, rsp, ImmutableListMultimap.of(), result); } catch (DocQueryException e) { - log.error("Doc search failed:", e); + logger.atSevere().withCause(e).log("Doc search failed"); rsp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } } else { diff --git a/java/com/google/gerrit/httpd/RunAsFilter.java b/java/com/google/gerrit/httpd/RunAsFilter.java index 9940cd9cd4..f3bf5af0a2 100644 --- a/java/com/google/gerrit/httpd/RunAsFilter.java +++ b/java/com/google/gerrit/httpd/RunAsFilter.java @@ -18,6 +18,7 @@ import static com.google.gerrit.httpd.restapi.RestApiServlet.replyError; import static javax.servlet.http.HttpServletResponse.SC_FORBIDDEN; import static javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.registration.DynamicItem; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.reviewdb.client.Account; @@ -41,13 +42,11 @@ import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.eclipse.jgit.errors.ConfigInvalidException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Allows running a request as another user account. */ @Singleton class RunAsFilter implements Filter { - private static final Logger log = LoggerFactory.getLogger(RunAsFilter.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final String RUN_AS = "X-Gerrit-RunAs"; static class Module extends ServletModule { @@ -99,7 +98,7 @@ class RunAsFilter implements Filter { replyError(req, res, SC_FORBIDDEN, "not permitted to use " + RUN_AS, null); return; } catch (PermissionBackendException e) { - log.warn("cannot check runAs", e); + logger.atWarning().withCause(e).log("cannot check runAs"); replyError(req, res, SC_INTERNAL_SERVER_ERROR, RUN_AS + " unavailable", null); return; } @@ -108,7 +107,7 @@ class RunAsFilter implements Filter { try { target = accountResolver.find(runas); } catch (OrmException | IOException | ConfigInvalidException e) { - log.warn("cannot resolve account for " + RUN_AS, e); + logger.atWarning().withCause(e).log("cannot resolve account for %s", RUN_AS); replyError(req, res, SC_INTERNAL_SERVER_ERROR, "cannot resolve " + RUN_AS, e); return; } diff --git a/java/com/google/gerrit/httpd/WebSessionManager.java b/java/com/google/gerrit/httpd/WebSessionManager.java index 8b6694c105..3d2668b339 100644 --- a/java/com/google/gerrit/httpd/WebSessionManager.java +++ b/java/com/google/gerrit/httpd/WebSessionManager.java @@ -29,6 +29,7 @@ import static java.util.concurrent.TimeUnit.MINUTES; import static java.util.concurrent.TimeUnit.SECONDS; import com.google.common.cache.Cache; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.server.account.externalids.ExternalId; import com.google.gerrit.server.config.ConfigUtil; @@ -43,11 +44,9 @@ import java.io.Serializable; import java.security.SecureRandom; import java.util.concurrent.TimeUnit; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class WebSessionManager { - private static final Logger log = LoggerFactory.getLogger(WebSessionManager.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static final String CACHE_NAME = "web_sessions"; private final long sessionMaxAgeMillis; @@ -69,10 +68,11 @@ public class WebSessionManager { SECONDS.convert(MAX_AGE_MINUTES, MINUTES), SECONDS)); if (sessionMaxAgeMillis < MINUTES.toMillis(5)) { - log.warn( - String.format( + logger + .atWarning() + .log( "cache.%s.maxAge is set to %d milliseconds; it should be at least 5 minutes.", - CACHE_NAME, sessionMaxAgeMillis)); + CACHE_NAME, sessionMaxAgeMillis); } } diff --git a/java/com/google/gerrit/httpd/auth/container/HttpLoginServlet.java b/java/com/google/gerrit/httpd/auth/container/HttpLoginServlet.java index d86c85aa17..515d694165 100644 --- a/java/com/google/gerrit/httpd/auth/container/HttpLoginServlet.java +++ b/java/com/google/gerrit/httpd/auth/container/HttpLoginServlet.java @@ -17,6 +17,7 @@ package com.google.gerrit.httpd.auth.container; import static com.google.gerrit.server.account.externalids.ExternalId.SCHEME_EXTERNAL; import static java.nio.charset.StandardCharsets.UTF_8; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.PageLinks; import com.google.gerrit.extensions.registration.DynamicItem; import com.google.gerrit.httpd.CanonicalWebUrl; @@ -40,8 +41,6 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.eclipse.jgit.errors.ConfigInvalidException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; @@ -56,7 +55,7 @@ import org.w3c.dom.NodeList; @Singleton class HttpLoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; - private static final Logger log = LoggerFactory.getLogger(HttpLoginServlet.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final DynamicItem webSession; private final CanonicalWebUrl urlProvider; @@ -86,10 +85,12 @@ class HttpLoginServlet extends HttpServlet { CacheHeaders.setNotCacheable(rsp); final String user = authFilter.getRemoteUser(req); if (user == null || "".equals(user)) { - log.error( - "Unable to authenticate user by " - + authFilter.getLoginHeader() - + " request header. Check container or server configuration."); + logger + .atSevere() + .log( + "Unable to authenticate user by %s request header." + + " Check container or server configuration.", + authFilter.getLoginHeader()); final Document doc = HtmlDomUtil.parseFile( // @@ -118,7 +119,7 @@ class HttpLoginServlet extends HttpServlet { try { arsp = accountManager.authenticate(areq); } catch (AccountException e) { - log.error("Unable to authenticate user \"" + user + "\"", e); + logger.atSevere().withCause(e).log("Unable to authenticate user \"%s\"", user); rsp.sendError(HttpServletResponse.SC_FORBIDDEN); return; } @@ -126,16 +127,17 @@ class HttpLoginServlet extends HttpServlet { String remoteExternalId = authFilter.getRemoteExternalIdToken(req); if (remoteExternalId != null) { try { - log.debug("Associating external identity \"{}\" to user \"{}\"", remoteExternalId, user); + logger + .atFine() + .log("Associating external identity \"%s\" to user \"%s\"", remoteExternalId, user); updateRemoteExternalId(arsp, remoteExternalId); } catch (AccountException | OrmException | ConfigInvalidException e) { - log.error( - "Unable to associate external identity \"" - + remoteExternalId - + "\" to user \"" - + user - + "\"", - e); + logger + .atSevere() + .withCause(e) + .log( + "Unable to associate external identity \"%s\" to user \"%s\"", + remoteExternalId, user); rsp.sendError(HttpServletResponse.SC_FORBIDDEN); return; } diff --git a/java/com/google/gerrit/httpd/auth/container/HttpsClientSslCertAuthFilter.java b/java/com/google/gerrit/httpd/auth/container/HttpsClientSslCertAuthFilter.java index 534e50ec12..40807c05ab 100644 --- a/java/com/google/gerrit/httpd/auth/container/HttpsClientSslCertAuthFilter.java +++ b/java/com/google/gerrit/httpd/auth/container/HttpsClientSslCertAuthFilter.java @@ -14,6 +14,7 @@ package com.google.gerrit.httpd.auth.container; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.registration.DynamicItem; import com.google.gerrit.httpd.WebSession; import com.google.gerrit.server.account.AccountException; @@ -32,14 +33,12 @@ import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton class HttpsClientSslCertAuthFilter implements Filter { + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final Pattern REGEX_USERID = Pattern.compile("CN=([^,]*)"); - private static final Logger log = LoggerFactory.getLogger(HttpsClientSslCertAuthFilter.class); private final DynamicItem webSession; private final AccountManager accountManager; @@ -77,7 +76,7 @@ class HttpsClientSslCertAuthFilter implements Filter { arsp = accountManager.authenticate(areq); } catch (AccountException e) { String err = "Unable to authenticate user \"" + userName + "\""; - log.error(err, e); + logger.atSevere().withCause(e).log(err); throw new ServletException(err, e); } webSession.get().login(arsp, true); diff --git a/java/com/google/gerrit/httpd/auth/ldap/LdapLoginServlet.java b/java/com/google/gerrit/httpd/auth/ldap/LdapLoginServlet.java index 46714756fb..63704764c9 100644 --- a/java/com/google/gerrit/httpd/auth/ldap/LdapLoginServlet.java +++ b/java/com/google/gerrit/httpd/auth/ldap/LdapLoginServlet.java @@ -18,6 +18,7 @@ import static java.nio.charset.StandardCharsets.UTF_8; import com.google.common.base.MoreObjects; import com.google.common.base.Strings; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.extensions.registration.DynamicItem; import com.google.gerrit.httpd.CanonicalWebUrl; @@ -41,8 +42,6 @@ import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -50,7 +49,7 @@ import org.w3c.dom.Element; @SuppressWarnings("serial") @Singleton class LdapLoginServlet extends HttpServlet { - private static final Logger log = LoggerFactory.getLogger(LdapLoginServlet.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final AccountManager accountManager; private final DynamicItem webSession; @@ -130,15 +129,15 @@ class LdapLoginServlet extends HttpServlet { } catch (AuthenticationFailedException e) { // This exception is thrown if the user provided wrong credentials, we don't need to log a // stacktrace for it. - log.warn("'{}' failed to sign in: {}", username, e.getMessage()); + logger.atWarning().log("'%s' failed to sign in: %s", username, e.getMessage()); sendForm(req, res, "Invalid username or password."); return; } catch (AccountException e) { - log.warn("'{}' failed to sign in", username, e); + logger.atWarning().withCause(e).log("'%s' failed to sign in", username); sendForm(req, res, "Authentication failed."); return; } catch (RuntimeException e) { - log.error("LDAP authentication failed", e); + logger.atSevere().withCause(e).log("LDAP authentication failed"); sendForm(req, res, "Authentication unavailable at this time."); return; } diff --git a/java/com/google/gerrit/httpd/auth/oauth/BUILD b/java/com/google/gerrit/httpd/auth/oauth/BUILD index aa63f0d419..96726ad0db 100644 --- a/java/com/google/gerrit/httpd/auth/oauth/BUILD +++ b/java/com/google/gerrit/httpd/auth/oauth/BUILD @@ -15,9 +15,9 @@ java_library( "//lib:gwtorm", "//lib:servlet-api-3_1", "//lib/commons:codec", + "//lib/flogger:api", "//lib/guice", "//lib/guice:guice-servlet", "//lib/jgit/org.eclipse.jgit:jgit", - "//lib/log:api", ], ) diff --git a/java/com/google/gerrit/httpd/auth/oauth/OAuthSession.java b/java/com/google/gerrit/httpd/auth/oauth/OAuthSession.java index 68b28a9d9d..866aaa0701 100644 --- a/java/com/google/gerrit/httpd/auth/oauth/OAuthSession.java +++ b/java/com/google/gerrit/httpd/auth/oauth/OAuthSession.java @@ -18,6 +18,7 @@ import static javax.servlet.http.HttpServletResponse.SC_UNAUTHORIZED; import com.google.common.base.CharMatcher; import com.google.common.base.Strings; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.auth.oauth.OAuthServiceProvider; import com.google.gerrit.extensions.auth.oauth.OAuthToken; import com.google.gerrit.extensions.auth.oauth.OAuthUserInfo; @@ -47,13 +48,12 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.codec.binary.Base64; import org.eclipse.jgit.errors.ConfigInvalidException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @SessionScoped /* OAuth protocol implementation */ class OAuthSession { - private static final Logger log = LoggerFactory.getLogger(OAuthSession.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + private static final SecureRandom randomState = newRandomGenerator(); private final String state; private final DynamicItem webSession; @@ -93,7 +93,7 @@ class OAuthSession { boolean login( HttpServletRequest request, HttpServletResponse response, OAuthServiceProvider oauth) throws IOException { - log.debug("Login " + this); + logger.atFine().log("Login %s", this); if (isOAuthFinal(request)) { if (!checkState(request)) { @@ -101,19 +101,19 @@ class OAuthSession { return false; } - log.debug("Login-Retrieve-User " + this); + logger.atFine().log("Login-Retrieve-User %s", this); OAuthToken token = oauth.getAccessToken(new OAuthVerifier(request.getParameter("code"))); user = oauth.getUserInfo(token); if (isLoggedIn()) { - log.debug("Login-SUCCESS " + this); + logger.atFine().log("Login-SUCCESS %s", this); authenticateAndRedirect(request, response, token); return true; } response.sendError(SC_UNAUTHORIZED); return false; } - log.debug("Login-PHASE1 " + this); + logger.atFine().log("Login-PHASE1 %s", this); redirectToken = request.getRequestURI(); // We are here in content of filter. // Due to this Jetty limitation: @@ -148,7 +148,7 @@ class OAuthSession { accountId = arsp.getAccountId(); tokenCache.put(accountId, token); } catch (AccountException e) { - log.error("Unable to authenticate user \"" + user + "\"", e); + logger.atSevere().withCause(e).log("Unable to authenticate user \"%s\"", user); rsp.sendError(HttpServletResponse.SC_FORBIDDEN); return; } @@ -169,40 +169,33 @@ class OAuthSession { if (claimedId.isPresent() && actualId.isPresent()) { if (claimedId.get().equals(actualId.get())) { // Both link to the same account, that's what we expected. - log.debug("OAuth2: claimed identity equals current id"); + logger.atFine().log("OAuth2: claimed identity equals current id"); } else { // This is (for now) a fatal error. There are two records // for what might be the same user. // - log.error( - "OAuth accounts disagree over user identity:\n" - + " Claimed ID: " - + claimedId.get() - + " is " - + claimedIdentifier - + "\n" - + " Delgate ID: " - + actualId.get() - + " is " - + user.getExternalId()); + logger + .atSevere() + .log( + "OAuth accounts disagree over user identity:\n" + + " Claimed ID: %s is %s\n" + + " Delgate ID: %s is %s", + claimedId.get(), claimedIdentifier, actualId.get(), user.getExternalId()); rsp.sendError(HttpServletResponse.SC_FORBIDDEN); return false; } } else if (claimedId.isPresent() && !actualId.isPresent()) { // Claimed account already exists: link to it. // - log.info("OAuth2: linking claimed identity to {}", claimedId.get().toString()); + logger.atInfo().log("OAuth2: linking claimed identity to %s", claimedId.get().toString()); try { accountManager.link(claimedId.get(), req); } catch (OrmException | ConfigInvalidException e) { - log.error( - "Cannot link: " - + user.getExternalId() - + " to user identity:\n" - + " Claimed ID: " - + claimedId.get() - + " is " - + claimedIdentifier); + logger + .atSevere() + .log( + "Cannot link: %s to user identity:\n Claimed ID: %s is %s", + user.getExternalId(), claimedId.get(), claimedIdentifier); rsp.sendError(HttpServletResponse.SC_FORBIDDEN); return false; } @@ -215,11 +208,11 @@ class OAuthSession { try { accountManager.link(identifiedUser.get().getAccountId(), areq); } catch (OrmException | ConfigInvalidException e) { - log.error( - "Cannot link: " - + user.getExternalId() - + " to user identity: " - + identifiedUser.get().getAccountId()); + logger + .atSevere() + .log( + "Cannot link: %s to user identity: %s", + user.getExternalId(), identifiedUser.get().getAccountId()); rsp.sendError(HttpServletResponse.SC_FORBIDDEN); return false; } finally { @@ -241,7 +234,7 @@ class OAuthSession { private boolean checkState(ServletRequest request) { String s = Strings.nullToEmpty(request.getParameter("state")); if (!s.equals(state)) { - log.error("Illegal request state '" + s + "' on OAuthProtocol " + this); + logger.atSevere().log("Illegal request state '%s' on OAuthProtocol %s", s, this); return false; } return true; diff --git a/java/com/google/gerrit/httpd/auth/openid/BUILD b/java/com/google/gerrit/httpd/auth/openid/BUILD index 44b7bd1ff5..9c48832fea 100644 --- a/java/com/google/gerrit/httpd/auth/openid/BUILD +++ b/java/com/google/gerrit/httpd/auth/openid/BUILD @@ -17,10 +17,10 @@ java_library( "//lib:gwtorm", "//lib:servlet-api-3_1", "//lib/commons:codec", + "//lib/flogger:api", "//lib/guice", "//lib/guice:guice-servlet", "//lib/jgit/org.eclipse.jgit:jgit", - "//lib/log:api", "//lib/openid:consumer", ], ) diff --git a/java/com/google/gerrit/httpd/auth/openid/LoginForm.java b/java/com/google/gerrit/httpd/auth/openid/LoginForm.java index 6090fed767..adf6458751 100644 --- a/java/com/google/gerrit/httpd/auth/openid/LoginForm.java +++ b/java/com/google/gerrit/httpd/auth/openid/LoginForm.java @@ -20,6 +20,7 @@ import com.google.common.base.MoreObjects; import com.google.common.base.Strings; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.common.PageLinks; import com.google.gerrit.common.auth.openid.OpenIdUrls; @@ -47,8 +48,6 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -56,7 +55,8 @@ import org.w3c.dom.Element; @SuppressWarnings("serial") @Singleton class LoginForm extends HttpServlet { - private static final Logger log = LoggerFactory.getLogger(LoginForm.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + private static final ImmutableMap ALL_PROVIDERS = ImmutableMap.of( "launchpad", OpenIdUrls.URL_LAUNCHPAD, @@ -91,7 +91,7 @@ class LoginForm extends HttpServlet { this.oauthServiceProviders = oauthServiceProviders; if (urlProvider == null || Strings.isNullOrEmpty(urlProvider.get())) { - log.error("gerrit.canonicalWebUrl must be set in gerrit.config"); + logger.atSevere().log("gerrit.canonicalWebUrl must be set in gerrit.config"); } if (authConfig.getAuthType() == AuthType.OPENID_SSO) { @@ -160,14 +160,14 @@ class LoginForm extends HttpServlet { mode = SignInMode.SIGN_IN; } - log.debug("mode \"{}\"", mode); + logger.atFine().log("mode \"%s\"", mode); OAuthServiceProvider oauthProvider = lookupOAuthServiceProvider(id); if (oauthProvider == null) { - log.debug("OpenId provider \"{}\"", id); + logger.atFine().log("OpenId provider \"%s\"", id); discover(req, res, link, id, remember, token, mode); } else { - log.debug("OAuth provider \"{}\"", id); + logger.atFine().log("OAuth provider \"%s\"", id); OAuthSessionOverOpenID oauthSession = oauthSessionProvider.get(); if (!currentUserProvider.get().isIdentifiedUser() && oauthSession.isLoggedIn()) { oauthSession.logout(); diff --git a/java/com/google/gerrit/httpd/auth/openid/OAuthSessionOverOpenID.java b/java/com/google/gerrit/httpd/auth/openid/OAuthSessionOverOpenID.java index 878f9eeef0..1cc43becb8 100644 --- a/java/com/google/gerrit/httpd/auth/openid/OAuthSessionOverOpenID.java +++ b/java/com/google/gerrit/httpd/auth/openid/OAuthSessionOverOpenID.java @@ -17,6 +17,7 @@ package com.google.gerrit.httpd.auth.openid; import static javax.servlet.http.HttpServletResponse.SC_UNAUTHORIZED; import com.google.common.base.Strings; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.auth.oauth.OAuthServiceProvider; import com.google.gerrit.extensions.auth.oauth.OAuthToken; import com.google.gerrit.extensions.auth.oauth.OAuthUserInfo; @@ -45,14 +46,13 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.codec.binary.Base64; import org.eclipse.jgit.errors.ConfigInvalidException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** OAuth protocol implementation */ @SessionScoped class OAuthSessionOverOpenID { + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + static final String GERRIT_LOGIN = "/login"; - private static final Logger log = LoggerFactory.getLogger(OAuthSessionOverOpenID.class); private static final SecureRandom randomState = newRandomGenerator(); private final String state; private final DynamicItem webSession; @@ -89,7 +89,7 @@ class OAuthSessionOverOpenID { boolean login( HttpServletRequest request, HttpServletResponse response, OAuthServiceProvider oauth) throws IOException { - log.debug("Login " + this); + logger.atFine().log("Login %s", this); if (isOAuthFinal(request)) { if (!checkState(request)) { @@ -97,19 +97,19 @@ class OAuthSessionOverOpenID { return false; } - log.debug("Login-Retrieve-User " + this); + logger.atFine().log("Login-Retrieve-User %s", this); token = oauth.getAccessToken(new OAuthVerifier(request.getParameter("code"))); user = oauth.getUserInfo(token); if (isLoggedIn()) { - log.debug("Login-SUCCESS " + this); + logger.atFine().log("Login-SUCCESS %s", this); authenticateAndRedirect(request, response); return true; } response.sendError(SC_UNAUTHORIZED); return false; } - log.debug("Login-PHASE1 " + this); + logger.atFine().log("Login-PHASE1 %s", this); redirectToken = LoginUrlToken.getToken(request); response.sendRedirect(oauth.getAuthorizationUrl() + "&state=" + state); return false; @@ -135,50 +135,43 @@ class OAuthSessionOverOpenID { if (!Strings.isNullOrEmpty(claimedIdentifier)) { claimedId = accountManager.lookup(claimedIdentifier); if (!claimedId.isPresent()) { - log.debug("Claimed identity is unknown"); + logger.atFine().log("Claimed identity is unknown"); } } // Use case 1: claimed identity was provided during handshake phase // and user account exists for this identity if (claimedId.isPresent()) { - log.debug("Claimed identity is set and is known"); + logger.atFine().log("Claimed identity is set and is known"); if (actualId.isPresent()) { if (claimedId.get().equals(actualId.get())) { // Both link to the same account, that's what we expected. - log.debug("Both link to the same account. All is fine."); + logger.atFine().log("Both link to the same account. All is fine."); } else { // This is (for now) a fatal error. There are two records // for what might be the same user. The admin would have to // link the accounts manually. - log.error( - "OAuth accounts disagree over user identity:\n" - + " Claimed ID: " - + claimedId.get() - + " is " - + claimedIdentifier - + "\n" - + " Delgate ID: " - + actualId.get() - + " is " - + user.getExternalId()); + logger + .atFine() + .log( + "OAuth accounts disagree over user identity:\n" + + " Claimed ID: %s is %s\n" + + " Delgate ID: %s is %s", + claimedId.get(), claimedIdentifier, actualId.get(), user.getExternalId()); rsp.sendError(HttpServletResponse.SC_FORBIDDEN); return; } } else { // Claimed account already exists: link to it. - log.debug("Claimed account already exists: link to it."); + logger.atFine().log("Claimed account already exists: link to it."); try { accountManager.link(claimedId.get(), areq); } catch (OrmException | ConfigInvalidException e) { - log.error( - "Cannot link: " - + user.getExternalId() - + " to user identity:\n" - + " Claimed ID: " - + claimedId.get() - + " is " - + claimedIdentifier); + logger + .atSevere() + .log( + "Cannot link: %s to user identity:\n Claimed ID: %s is %s", + user.getExternalId(), claimedId.get(), claimedIdentifier); rsp.sendError(HttpServletResponse.SC_FORBIDDEN); return; } @@ -187,10 +180,12 @@ class OAuthSessionOverOpenID { // Use case 2: link mode activated from the UI Account.Id accountId = identifiedUser.get().getAccountId(); try { - log.debug("Linking \"{}\" to \"{}\"", user.getExternalId(), accountId); + logger.atFine().log("Linking \"%s\" to \"%s\"", user.getExternalId(), accountId); accountManager.link(accountId, areq); } catch (OrmException | ConfigInvalidException e) { - log.error("Cannot link: " + user.getExternalId() + " to user identity: " + accountId); + logger + .atSevere() + .log("Cannot link: %s to user identity: %s", user.getExternalId(), accountId); rsp.sendError(HttpServletResponse.SC_FORBIDDEN); return; } finally { @@ -202,7 +197,7 @@ class OAuthSessionOverOpenID { areq.setDisplayName(user.getDisplayName()); arsp = accountManager.authenticate(areq); } catch (AccountException e) { - log.error("Unable to authenticate user \"" + user + "\"", e); + logger.atSevere().withCause(e).log("Unable to authenticate user \"%s\"", user); rsp.sendError(HttpServletResponse.SC_FORBIDDEN); return; } @@ -223,7 +218,7 @@ class OAuthSessionOverOpenID { private boolean checkState(ServletRequest request) { String s = Strings.nullToEmpty(request.getParameter("state")); if (!s.equals(state)) { - log.error("Illegal request state '" + s + "' on OAuthProtocol " + this); + logger.atSevere().log("Illegal request state '%s' on OAuthProtocol %s", s, this); return false; } return true; diff --git a/java/com/google/gerrit/httpd/auth/openid/OpenIdServiceImpl.java b/java/com/google/gerrit/httpd/auth/openid/OpenIdServiceImpl.java index a971fc30d3..4664e3b37a 100644 --- a/java/com/google/gerrit/httpd/auth/openid/OpenIdServiceImpl.java +++ b/java/com/google/gerrit/httpd/auth/openid/OpenIdServiceImpl.java @@ -14,6 +14,7 @@ package com.google.gerrit.httpd.auth.openid; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.PageLinks; import com.google.gerrit.common.auth.openid.OpenIdUrls; import com.google.gerrit.extensions.registration.DynamicItem; @@ -64,12 +65,10 @@ import org.openid4java.message.sreg.SRegMessage; import org.openid4java.message.sreg.SRegRequest; import org.openid4java.message.sreg.SRegResponse; import org.openid4java.util.HttpClientFactory; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton class OpenIdServiceImpl { - private static final Logger log = LoggerFactory.getLogger(OpenIdServiceImpl.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); static final String RETURN_URL = "OpenID"; @@ -151,7 +150,7 @@ class OpenIdServiceImpl { final AuthRequest aReq; try { aReq = manager.authenticate(state.discovered, state.retTo.toString()); - log.debug("OpenID: openid-realm={}", state.contextUrl); + logger.atFine().log("OpenID: openid-realm=%s", state.contextUrl); aReq.setRealm(state.contextUrl); if (requestRegistration(aReq)) { @@ -173,7 +172,7 @@ class OpenIdServiceImpl { aReq.addExtension(pape); } } catch (MessageException | ConsumerException e) { - log.error("Cannot create OpenID redirect for " + openidIdentifier, e); + logger.atSevere().withCause(e).log("Cannot create OpenID redirect for %s" + openidIdentifier); return new DiscoveryResult(DiscoveryResult.Status.ERROR); } @@ -195,7 +194,7 @@ class OpenIdServiceImpl { try { return accountManager.lookup(aReq.getIdentity()) == null; } catch (AccountException e) { - log.warn("Cannot determine if user account exists", e); + logger.atWarning().withCause(e).log("Cannot determine if user account exists"); return true; } } @@ -250,17 +249,18 @@ class OpenIdServiceImpl { if ("Nonce verification failed.".equals(result.getStatusMsg())) { // We might be suffering from clock skew on this system. // - log.error( - "OpenID failure: " - + result.getStatusMsg() - + " Likely caused by clock skew on this server," - + " install/configure NTP."); + logger + .atSevere() + .log( + "OpenID failure: %s Likely caused by clock skew on this server," + + " install/configure NTP.", + result.getStatusMsg()); cancelWithError(req, rsp, result.getStatusMsg()); } else if (result.getStatusMsg() != null) { // Authentication failed. // - log.error("OpenID failure: " + result.getStatusMsg()); + logger.atSevere().log("OpenID failure: %s", result.getStatusMsg()); cancelWithError(req, rsp, result.getStatusMsg()); } else { @@ -286,12 +286,12 @@ class OpenIdServiceImpl { // right now. Instead of blocking all of them log the error and // let the authentication complete anyway. // - log.error("Invalid PAPE response " + openidIdentifier + ": " + err); + logger.atSevere().log("Invalid PAPE response %s: %s", openidIdentifier, err); unsupported = true; ext = null; } if (!unsupported && ext == null) { - log.error("No PAPE extension response from " + openidIdentifier); + logger.atSevere().log("No PAPE extension response from %s", openidIdentifier); cancelWithError(req, rsp, "OpenID provider does not support PAPE."); return; } @@ -354,7 +354,7 @@ class OpenIdServiceImpl { } if (!match) { - log.error("Domain disallowed: " + emailDomain); + logger.atSevere().log("Domain disallowed: %s", emailDomain); cancelWithError(req, rsp, "Domain disallowed"); return; } @@ -376,17 +376,13 @@ class OpenIdServiceImpl { // This is (for now) a fatal error. There are two records // for what might be the same user. // - log.error( - "OpenID accounts disagree over user identity:\n" - + " Claimed ID: " - + claimedId.get() - + " is " - + claimedIdentifier - + "\n" - + " Delgate ID: " - + actualId.get() - + " is " - + areq.getExternalIdKey()); + logger + .atSevere() + .log( + "OpenID accounts disagree over user identity:\n" + + " Claimed ID: %s is %s\n" + + " Delgate ID: %s is %s", + claimedId.get(), claimedIdentifier, actualId.get(), areq.getExternalIdKey()); cancelWithError(req, rsp, "Contact site administrator"); return; } @@ -451,7 +447,7 @@ class OpenIdServiceImpl { } } } catch (AccountException e) { - log.error("OpenID authentication failure", e); + logger.atSevere().withCause(e).log("OpenID authentication failure"); cancelWithError(req, rsp, "Contact site administrator"); } } @@ -531,7 +527,7 @@ class OpenIdServiceImpl { try { list = manager.discover(openidIdentifier); } catch (DiscoveryException e) { - log.error("Cannot discover OpenID " + openidIdentifier, e); + logger.atSevere().withCause(e).log("Cannot discover OpenID %s", openidIdentifier); return null; } if (list == null || list.isEmpty()) { diff --git a/java/com/google/gerrit/httpd/gitweb/GitwebServlet.java b/java/com/google/gerrit/httpd/gitweb/GitwebServlet.java index cc22d245f4..383efd34ca 100644 --- a/java/com/google/gerrit/httpd/gitweb/GitwebServlet.java +++ b/java/com/google/gerrit/httpd/gitweb/GitwebServlet.java @@ -34,6 +34,7 @@ import static java.nio.charset.StandardCharsets.UTF_8; import com.google.common.base.CharMatcher; import com.google.common.base.Splitter; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.PageLinks; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.ResourceConflictException; @@ -85,14 +86,12 @@ import javax.servlet.http.HttpServletResponse; import org.eclipse.jgit.errors.RepositoryNotFoundException; import org.eclipse.jgit.lib.Config; import org.eclipse.jgit.lib.Repository; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Invokes {@code gitweb.cgi} for the project given in {@code p}. */ @SuppressWarnings("serial") @Singleton class GitwebServlet extends HttpServlet { - private static final Logger log = LoggerFactory.getLogger(GitwebServlet.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final String PROJECT_LIST_ACTION = "project_list"; @@ -137,7 +136,7 @@ class GitwebServlet extends HttpServlet { try { uri = new URI(url); } catch (URISyntaxException e) { - log.error("Invalid gitweb.url: " + url); + logger.atSevere().log("Invalid gitweb.url: %s", url); } gitwebUrl = uri; } else { @@ -428,7 +427,7 @@ class GitwebServlet extends HttpServlet { sendErrorOrRedirect(req, rsp, HttpServletResponse.SC_NOT_FOUND); return; } catch (IOException | PermissionBackendException err) { - log.error("cannot load " + name, err); + logger.atSevere().withCause(err).log("cannot load %s", name); rsp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); return; } catch (ResourceConflictException e) { @@ -528,13 +527,13 @@ class GitwebServlet extends HttpServlet { final int status = proc.exitValue(); if (0 != status) { - log.error("Non-zero exit status (" + status + ") from " + gitwebCgi); + logger.atSevere().log("Non-zero exit status (%d) from %s", status, gitwebCgi); if (!rsp.isCommitted()) { rsp.sendError(500); } } } catch (InterruptedException ie) { - log.debug("CGI: interrupted waiting for CGI to terminate"); + logger.atFine().log("CGI: interrupted waiting for CGI to terminate"); } } @@ -659,7 +658,7 @@ class GitwebServlet extends HttpServlet { dst.close(); } } catch (IOException e) { - log.error("Unexpected error copying input to CGI", e); + logger.atSevere().withCause(e).log("Unexpected error copying input to CGI"); } }, "Gitweb-InputFeeder") @@ -679,9 +678,9 @@ class GitwebServlet extends HttpServlet { } b.append("CGI: ").append(line); } - log.error(b.toString()); + logger.atSevere().log(b.toString()); } catch (IOException e) { - log.error("Unexpected error copying stderr from CGI", e); + logger.atSevere().withCause(e).log("Unexpected error copying stderr from CGI"); } }, "Gitweb-ErrorLogger") diff --git a/java/com/google/gerrit/httpd/init/BUILD b/java/com/google/gerrit/httpd/init/BUILD index f240088bcd..292ceff585 100644 --- a/java/com/google/gerrit/httpd/init/BUILD +++ b/java/com/google/gerrit/httpd/init/BUILD @@ -27,10 +27,10 @@ java_library( "//lib:guava", "//lib:gwtorm", "//lib:servlet-api-3_1", + "//lib/flogger:api", "//lib/guice", "//lib/guice:guice-servlet", "//lib/jgit/org.eclipse.jgit:jgit", - "//lib/log:api", "//prolog:gerrit-prolog-common", ], ) diff --git a/java/com/google/gerrit/httpd/init/SiteInitializer.java b/java/com/google/gerrit/httpd/init/SiteInitializer.java index 17a95b57ec..de4f2848e1 100644 --- a/java/com/google/gerrit/httpd/init/SiteInitializer.java +++ b/java/com/google/gerrit/httpd/init/SiteInitializer.java @@ -14,6 +14,7 @@ package com.google.gerrit.httpd.init; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.pgm.init.BaseInit; import com.google.gerrit.pgm.init.PluginsDistribution; import java.nio.file.Path; @@ -23,11 +24,9 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public final class SiteInitializer { - private static final Logger LOG = LoggerFactory.getLogger(SiteInitializer.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final String sitePath; private final String initPath; @@ -49,7 +48,7 @@ public final class SiteInitializer { try { if (sitePath != null) { Path site = Paths.get(sitePath); - LOG.info("Initializing site at " + site.toRealPath().normalize()); + logger.atInfo().log("Initializing site at %s", site.toRealPath().normalize()); new BaseInit(site, false, true, pluginsDistribution, pluginsToInstall).run(); return; } @@ -60,7 +59,7 @@ public final class SiteInitializer { site = Paths.get(initPath); } if (site != null) { - LOG.info("Initializing site at " + site.toRealPath().normalize()); + logger.atInfo().log("Initializing site at %s", site.toRealPath().normalize()); new BaseInit( site, new ReviewDbDataSourceProvider(), @@ -72,7 +71,7 @@ public final class SiteInitializer { } } } catch (Exception e) { - LOG.error("Site init failed", e); + logger.atSevere().withCause(e).log("Site init failed"); throw new RuntimeException(e); } } diff --git a/java/com/google/gerrit/httpd/init/WebAppInitializer.java b/java/com/google/gerrit/httpd/init/WebAppInitializer.java index 690d1ac1f8..728fcd9003 100644 --- a/java/com/google/gerrit/httpd/init/WebAppInitializer.java +++ b/java/com/google/gerrit/httpd/init/WebAppInitializer.java @@ -18,6 +18,7 @@ import static com.google.inject.Scopes.SINGLETON; import static com.google.inject.Stage.PRODUCTION; import com.google.common.base.Splitter; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.elasticsearch.ElasticIndexModule; import com.google.gerrit.extensions.client.AuthType; import com.google.gerrit.gpg.GpgModule; @@ -127,12 +128,10 @@ import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.sql.DataSource; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Configures the web application environment for Gerrit Code Review. */ public class WebAppInitializer extends GuiceServletContextListener implements Filter { - private static final Logger log = LoggerFactory.getLogger(WebAppInitializer.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private Path sitePath; private Injector dbInjector; @@ -194,7 +193,7 @@ public class WebAppInitializer extends GuiceServletContextListener implements Fi buf.append("\nResolve above errors before continuing."); buf.append("\nComplete stack trace follows:"); } - log.error(buf.toString(), first.getCause()); + logger.atSevere().withCause(first.getCause()).log(buf.toString()); throw new CreationException(Collections.singleton(first)); } diff --git a/java/com/google/gerrit/httpd/plugins/HttpPluginServlet.java b/java/com/google/gerrit/httpd/plugins/HttpPluginServlet.java index eb75a97d5d..adb5516b75 100644 --- a/java/com/google/gerrit/httpd/plugins/HttpPluginServlet.java +++ b/java/com/google/gerrit/httpd/plugins/HttpPluginServlet.java @@ -32,6 +32,7 @@ import com.google.common.base.Strings; import com.google.common.cache.Cache; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import com.google.common.flogger.FluentLogger; import com.google.common.io.ByteStreams; import com.google.common.net.HttpHeaders; import com.google.gerrit.extensions.registration.RegistrationHandle; @@ -92,14 +93,13 @@ import org.apache.commons.lang.StringUtils; import org.eclipse.jgit.lib.Config; import org.eclipse.jgit.util.IO; import org.eclipse.jgit.util.RawParseUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton class HttpPluginServlet extends HttpServlet implements StartPluginListener, ReloadPluginListener { + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + private static final int SMALL_RESOURCE = 128 * 1024; private static final long serialVersionUID = 1L; - private static final Logger log = LoggerFactory.getLogger(HttpPluginServlet.class); private final MimeUtilFileTypeRegistry mimeUtil; private final Provider webUrl; @@ -191,7 +191,7 @@ class HttpPluginServlet extends HttpServlet implements StartPluginListener, Relo try { filter = plugin.getHttpInjector().getInstance(GuiceFilter.class); } catch (RuntimeException e) { - log.warn("Plugin {} cannot load GuiceFilter", name, e); + logger.atWarning().withCause(e).log("Plugin %s cannot load GuiceFilter", name); return null; } @@ -199,7 +199,7 @@ class HttpPluginServlet extends HttpServlet implements StartPluginListener, Relo ServletContext ctx = PluginServletContext.create(plugin, wrapper.getFullPath(name)); filter.init(new WrappedFilterConfig(ctx)); } catch (ServletException e) { - log.warn("Plugin {} failed to initialize HTTP", name, e); + logger.atWarning().withCause(e).log("Plugin %s failed to initialize HTTP", name); return null; } @@ -423,12 +423,12 @@ class HttpPluginServlet extends HttpServlet implements StartPluginListener, Relo && (name.endsWith(".md") || name.endsWith(".html")) && size.isPresent()) { if (size.get() <= 0 || size.get() > SMALL_RESOURCE) { - log.warn( - "Plugin {}: {} omitted from document index. Size {} out of range (0,{}).", - pluginName, - name.substring(prefix.length()), - size.get(), - SMALL_RESOURCE); + logger + .atWarning() + .log( + "Plugin %s: %s omitted from document index. " + + "Size %d out of range (0,%d).", + pluginName, name.substring(prefix.length()), size.get(), SMALL_RESOURCE); return false; } return true; @@ -450,10 +450,11 @@ class HttpPluginServlet extends HttpServlet implements StartPluginListener, Relo if (about == null) { about = entry; } else { - log.warn( - "Plugin {}: Multiple 'about' documents found; using {}", - pluginName, - about.getName().substring(prefix.length())); + logger + .atWarning() + .log( + "Plugin %s: Multiple 'about' documents found; using %s", + pluginName, about.getName().substring(prefix.length())); } } else { docs.add(entry); @@ -731,7 +732,10 @@ class HttpPluginServlet extends HttpServlet implements StartPluginListener, Relo } return def; } catch (IOException e) { - log.warn("Error getting {} for plugin {}, using default", attr, plugin.getName(), e); + logger + .atWarning() + .withCause(e) + .log("Error getting %s for plugin %s, using default", attr, plugin.getName()); return null; } } diff --git a/java/com/google/gerrit/httpd/plugins/LfsPluginServlet.java b/java/com/google/gerrit/httpd/plugins/LfsPluginServlet.java index a8a8502149..0ee22fa7aa 100644 --- a/java/com/google/gerrit/httpd/plugins/LfsPluginServlet.java +++ b/java/com/google/gerrit/httpd/plugins/LfsPluginServlet.java @@ -18,6 +18,7 @@ import static com.google.gerrit.extensions.api.lfs.LfsDefinitions.CONTENTTYPE_VN import static java.nio.charset.StandardCharsets.UTF_8; import static javax.servlet.http.HttpServletResponse.SC_NOT_IMPLEMENTED; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.registration.RegistrationHandle; import com.google.gerrit.httpd.resources.Resource; import com.google.gerrit.server.config.GerritServerConfig; @@ -45,14 +46,14 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class LfsPluginServlet extends HttpServlet implements StartPluginListener, ReloadPluginListener { private static final long serialVersionUID = 1L; - private static final Logger log = LoggerFactory.getLogger(LfsPluginServlet.class); + + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + private static final String MESSAGE_LFS_NOT_CONFIGURED = "{\"message\":\"No LFS plugin is configured to handle LFS requests.\"}"; @@ -139,7 +140,7 @@ public class LfsPluginServlet extends HttpServlet try { guiceFilter = plugin.getHttpInjector().getInstance(GuiceFilter.class); } catch (RuntimeException e) { - log.warn("Plugin {} cannot load GuiceFilter", name, e); + logger.atWarning().withCause(e).log("Plugin %s cannot load GuiceFilter", name); return null; } @@ -147,7 +148,7 @@ public class LfsPluginServlet extends HttpServlet ServletContext ctx = PluginServletContext.create(plugin, "/"); guiceFilter.init(new WrappedFilterConfig(ctx)); } catch (ServletException e) { - log.warn("Plugin {} failed to initialize HTTP", name, e); + logger.atWarning().withCause(e).log("Plugin %s failed to initialize HTTP", name); return null; } diff --git a/java/com/google/gerrit/httpd/plugins/PluginServletContext.java b/java/com/google/gerrit/httpd/plugins/PluginServletContext.java index 8f64d9ff74..6a8ef328f5 100644 --- a/java/com/google/gerrit/httpd/plugins/PluginServletContext.java +++ b/java/com/google/gerrit/httpd/plugins/PluginServletContext.java @@ -15,6 +15,7 @@ package com.google.gerrit.httpd.plugins; import com.google.common.collect.Maps; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Version; import com.google.gerrit.server.plugins.Plugin; import java.io.InputStream; @@ -29,11 +30,9 @@ import java.util.concurrent.ConcurrentMap; import javax.servlet.RequestDispatcher; import javax.servlet.Servlet; import javax.servlet.ServletContext; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; class PluginServletContext { - private static final Logger log = LoggerFactory.getLogger(PluginServletContext.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); static ServletContext create(Plugin plugin, String contextPath) { return (ServletContext) @@ -155,7 +154,7 @@ class PluginServletContext { @Override public void log(String msg, Throwable reason) { - log.warn("[plugin {}] {}", plugin.getName(), msg, reason); + logger.atWarning().withCause(reason).log("[plugin %s] %s", plugin.getName(), msg); } @Override diff --git a/java/com/google/gerrit/httpd/raw/BazelBuild.java b/java/com/google/gerrit/httpd/raw/BazelBuild.java index f52792caf9..92a5aaac80 100644 --- a/java/com/google/gerrit/httpd/raw/BazelBuild.java +++ b/java/com/google/gerrit/httpd/raw/BazelBuild.java @@ -19,6 +19,7 @@ import static java.nio.charset.StandardCharsets.UTF_8; import com.google.common.base.Joiner; import com.google.common.escape.Escaper; +import com.google.common.flogger.FluentLogger; import com.google.common.html.HtmlEscapers; import com.google.common.io.ByteStreams; import com.google.gerrit.common.TimeUtil; @@ -33,11 +34,9 @@ import java.nio.file.Path; import java.util.Properties; import javax.servlet.http.HttpServletResponse; import org.eclipse.jgit.util.RawParseUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class BazelBuild { - private static final Logger log = LoggerFactory.getLogger(BazelBuild.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final Path sourceRoot; @@ -49,7 +48,7 @@ public class BazelBuild { public void build(Label label) throws IOException, BuildFailureException { ProcessBuilder proc = newBuildProcess(label); proc.directory(sourceRoot.toFile()).redirectErrorStream(true); - log.info("building " + label.fullName()); + logger.atInfo().log("building %s", label.fullName()); long start = TimeUtil.nowMs(); Process rebuild = proc.start(); byte[] out; @@ -67,12 +66,12 @@ public class BazelBuild { "interrupted waiting for: " + Joiner.on(' ').join(proc.command())); } if (status != 0) { - log.warn("build failed: " + new String(out, UTF_8)); + logger.atWarning().log("build failed: %s", new String(out, UTF_8)); throw new BuildFailureException(out); } long time = TimeUtil.nowMs() - start; - log.info(String.format("UPDATED %s in %.3fs", label.fullName(), time / 1000.0)); + logger.atInfo().log("UPDATED %s in %.3fs", label.fullName(), time / 1000.0); } // Represents a label in bazel. diff --git a/java/com/google/gerrit/httpd/raw/HostPageServlet.java b/java/com/google/gerrit/httpd/raw/HostPageServlet.java index ffecf1b4f1..74868d7235 100644 --- a/java/com/google/gerrit/httpd/raw/HostPageServlet.java +++ b/java/com/google/gerrit/httpd/raw/HostPageServlet.java @@ -18,6 +18,7 @@ import static com.google.gerrit.common.FileUtil.lastModified; import static java.nio.charset.StandardCharsets.UTF_8; import com.google.common.base.Strings; +import com.google.common.flogger.FluentLogger; import com.google.common.hash.Hasher; import com.google.common.hash.Hashing; import com.google.common.primitives.Bytes; @@ -60,8 +61,6 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.eclipse.jgit.errors.ConfigInvalidException; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; @@ -70,7 +69,7 @@ import org.w3c.dom.Node; @SuppressWarnings("serial") @Singleton public class HostPageServlet extends HttpServlet { - private static final Logger log = LoggerFactory.getLogger(HostPageServlet.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final String HPD_ID = "gerrit_hostpagedata"; private static final int DEFAULT_JS_LOAD_TIMEOUT = 5000; @@ -141,7 +140,7 @@ public class HostPageServlet extends HttpServlet { } src += "?content=" + md.hash().toString(); } else { - log.debug("No " + src + " in webapp root; keeping noncache.js URL"); + logger.atFine().log("No %s in webapp root; keeping noncache.js URL", src); } } catch (IOException e) { throw new IOException("Failed reading " + src, e); @@ -173,7 +172,7 @@ public class HostPageServlet extends HttpServlet { page = p; } } catch (IOException e) { - log.error("Cannot refresh site header/footer", e); + logger.atSevere().withCause(e).log("Cannot refresh site header/footer"); } return p; } @@ -225,7 +224,7 @@ public class HostPageServlet extends HttpServlet { | ConfigInvalidException | IOException | PermissionBackendException e) { - log.warn("Cannot query account diff preferences", e); + logger.atWarning().withCause(e).log("Cannot query account diff preferences"); } return DiffPreferencesInfo.defaults(); } diff --git a/java/com/google/gerrit/httpd/raw/ResourceServlet.java b/java/com/google/gerrit/httpd/raw/ResourceServlet.java index 3ec6bdbd73..035653da4f 100644 --- a/java/com/google/gerrit/httpd/raw/ResourceServlet.java +++ b/java/com/google/gerrit/httpd/raw/ResourceServlet.java @@ -30,6 +30,7 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.CharMatcher; import com.google.common.cache.Cache; import com.google.common.collect.ImmutableMap; +import com.google.common.flogger.FluentLogger; import com.google.common.hash.Hashing; import com.google.gerrit.common.Nullable; import com.google.gerrit.httpd.HtmlDomUtil; @@ -47,8 +48,6 @@ import java.util.zip.GZIPOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Base class for serving static resources. @@ -58,7 +57,7 @@ import org.slf4j.LoggerFactory; public abstract class ResourceServlet extends HttpServlet { private static final long serialVersionUID = 1L; - private static final Logger log = LoggerFactory.getLogger(ResourceServlet.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final int CACHE_FILE_SIZE_LIMIT_BYTES = 100 << 10; @@ -161,7 +160,7 @@ public abstract class ResourceServlet extends HttpServlet { r = cache.get(p, newLoader(p)); } } catch (ExecutionException e) { - log.warn("Cannot load static resource {}", req.getPathInfo(), e); + logger.atWarning().withCause(e).log("Cannot load static resource %s", req.getPathInfo()); CacheHeaders.setNotCacheable(rsp); rsp.setStatus(SC_INTERNAL_SERVER_ERROR); return; @@ -214,12 +213,12 @@ public abstract class ResourceServlet extends HttpServlet { try { Path p = getResourcePath(name); if (p == null) { - log.warn("Path doesn't exist {}", name); + logger.atWarning().log("Path doesn't exist %s", name); return null; } return cache.get(p, newLoader(p)); } catch (ExecutionException | IOException e) { - log.warn("Cannot load static resource {}", name, e); + logger.atWarning().withCause(e).log("Cannot load static resource %s", name); return null; } } diff --git a/java/com/google/gerrit/httpd/raw/StaticModule.java b/java/com/google/gerrit/httpd/raw/StaticModule.java index 915e9ed101..06ec799bac 100644 --- a/java/com/google/gerrit/httpd/raw/StaticModule.java +++ b/java/com/google/gerrit/httpd/raw/StaticModule.java @@ -21,6 +21,7 @@ import static java.nio.file.Files.isReadable; import com.google.common.cache.Cache; import com.google.common.collect.ImmutableList; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.extensions.client.UiType; import com.google.gerrit.httpd.XsrfCookieFilter; @@ -57,11 +58,9 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import javax.servlet.http.HttpServletResponse; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class StaticModule extends ServletModule { - private static final Logger log = LoggerFactory.getLogger(StaticModule.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static final String CACHE = "static_content"; public static final String GERRIT_UI_COOKIE = "GERRIT_UI"; @@ -184,7 +183,7 @@ public class StaticModule extends ServletModule { if (exists(configPath) && isReadable(configPath)) { return new SingleFileServlet(cache, configPath, true); } - log.warn("Cannot read httpd.robotsFile, using default"); + logger.atWarning().log("Cannot read httpd.robotsFile, using default"); } Paths p = getPaths(); if (p.warFs != null) { diff --git a/java/com/google/gerrit/httpd/restapi/RestApiServlet.java b/java/com/google/gerrit/httpd/restapi/RestApiServlet.java index 913128e9d4..4c9a03508f 100644 --- a/java/com/google/gerrit/httpd/restapi/RestApiServlet.java +++ b/java/com/google/gerrit/httpd/restapi/RestApiServlet.java @@ -58,6 +58,7 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.common.collect.ListMultimap; import com.google.common.collect.Lists; +import com.google.common.flogger.FluentLogger; import com.google.common.io.BaseEncoding; import com.google.common.io.CountingOutputStream; import com.google.common.math.IntMath; @@ -164,12 +165,11 @@ import org.eclipse.jgit.http.server.ServletUtils; import org.eclipse.jgit.lib.Config; import org.eclipse.jgit.util.TemporaryBuffer; import org.eclipse.jgit.util.TemporaryBuffer.Heap; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class RestApiServlet extends HttpServlet { private static final long serialVersionUID = 1L; - private static final Logger log = LoggerFactory.getLogger(RestApiServlet.class); + + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); /** MIME type used for a JSON response body. */ private static final String JSON_TYPE = "application/json"; @@ -1192,7 +1192,7 @@ public class RestApiServlet extends HttpServlet { if (!Strings.isNullOrEmpty(req.getQueryString())) { uri += "?" + req.getQueryString(); } - log.error("Error in {} {}", req.getMethod(), uri, err); + logger.atSevere().withCause(err).log("Error in %s %s", req.getMethod(), uri); if (!res.isCommitted()) { res.reset(); diff --git a/java/com/google/gerrit/httpd/rpc/GerritJsonServlet.java b/java/com/google/gerrit/httpd/rpc/GerritJsonServlet.java index e787a48aed..f5d2216f57 100644 --- a/java/com/google/gerrit/httpd/rpc/GerritJsonServlet.java +++ b/java/com/google/gerrit/httpd/rpc/GerritJsonServlet.java @@ -16,6 +16,7 @@ package com.google.gerrit.httpd.rpc; import com.google.common.collect.ListMultimap; import com.google.common.collect.MultimapBuilder; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.TimeUtil; import com.google.gerrit.common.audit.Audit; import com.google.gerrit.common.auth.SignInRequired; @@ -38,13 +39,12 @@ import java.lang.reflect.Field; import java.lang.reflect.Method; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Base JSON servlet to ensure the current user is not forged. */ @SuppressWarnings("serial") final class GerritJsonServlet extends JsonServlet { - private static final Logger log = LoggerFactory.getLogger(GerritJsonServlet.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + private static final ThreadLocal currentCall = new ThreadLocal<>(); private static final ThreadLocal currentMethod = new ThreadLocal<>(); private final DynamicItem session; @@ -141,7 +141,7 @@ final class GerritJsonServlet extends JsonServlet result)); } } catch (Throwable all) { - log.error("Unable to log the call", all); + logger.atSevere().withCause(all).log("Unable to log the call"); } } @@ -190,7 +190,7 @@ final class GerritJsonServlet extends JsonServlet declaredField = clazz.getDeclaredField(fieldName); declaredField.setAccessible(true); } catch (Exception e) { - log.error("Unable to expose RPS/JSON result field"); + logger.atSevere().log("Unable to expose RPS/JSON result field"); } return declaredField; } @@ -205,9 +205,9 @@ final class GerritJsonServlet extends JsonServlet Method method = (Method) methodField.get(this.getMethod()); return method.getDeclaringClass(); } catch (IllegalArgumentException e) { - log.error("Cannot access result field"); + logger.atSevere().log("Cannot access result field"); } catch (IllegalAccessException e) { - log.error("No permissions to access result field"); + logger.atSevere().log("No permissions to access result field"); } return null; @@ -222,9 +222,9 @@ final class GerritJsonServlet extends JsonServlet try { return resultField.get(this); } catch (IllegalArgumentException e) { - log.error("Cannot access result field"); + logger.atSevere().log("Cannot access result field"); } catch (IllegalAccessException e) { - log.error("No permissions to access result field"); + logger.atSevere().log("No permissions to access result field"); } return null; diff --git a/java/com/google/gerrit/httpd/rpc/SystemInfoServiceImpl.java b/java/com/google/gerrit/httpd/rpc/SystemInfoServiceImpl.java index 7a7713dcf0..634e8d8502 100644 --- a/java/com/google/gerrit/httpd/rpc/SystemInfoServiceImpl.java +++ b/java/com/google/gerrit/httpd/rpc/SystemInfoServiceImpl.java @@ -14,6 +14,7 @@ package com.google.gerrit.httpd.rpc; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.SshHostKey; import com.google.gerrit.common.data.SystemInfoService; import com.google.gerrit.server.ssh.SshInfo; @@ -26,11 +27,9 @@ import com.jcraft.jsch.JSch; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; class SystemInfoServiceImpl implements SystemInfoService { - private static final Logger log = LoggerFactory.getLogger(SystemInfoServiceImpl.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final JSch JSCH = new JSch(); @@ -63,7 +62,7 @@ class SystemInfoServiceImpl implements SystemInfoService { HttpServletRequest r = httpRequest.get(); String ua = r.getHeader("User-Agent"); message = message.replaceAll("\n", "\n "); - log.error("Client UI JavaScript error: User-Agent=" + ua + ": " + message); + logger.atSevere().log("Client UI JavaScript error: User-Agent=%s: %s", ua, message); callback.onSuccess(VoidResult.INSTANCE); } } diff --git a/java/com/google/gerrit/httpd/template/SiteHeaderFooter.java b/java/com/google/gerrit/httpd/template/SiteHeaderFooter.java index dca4d0f099..655f4ca0e5 100644 --- a/java/com/google/gerrit/httpd/template/SiteHeaderFooter.java +++ b/java/com/google/gerrit/httpd/template/SiteHeaderFooter.java @@ -17,6 +17,7 @@ package com.google.gerrit.httpd.template; import static com.google.gerrit.common.FileUtil.lastModified; import com.google.common.base.Strings; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.httpd.HtmlDomUtil; import com.google.gerrit.server.config.GerritServerConfig; import com.google.gerrit.server.config.SitePaths; @@ -25,14 +26,12 @@ import com.google.inject.Singleton; import java.io.IOException; import java.nio.file.Path; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; @Singleton public class SiteHeaderFooter { - private static final Logger log = LoggerFactory.getLogger(SiteHeaderFooter.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final boolean refreshHeaderFooter; private final SitePaths sitePaths; @@ -48,7 +47,7 @@ public class SiteHeaderFooter { t.load(); template = t; } catch (IOException e) { - log.warn("Cannot load site header or footer", e); + logger.atWarning().withCause(e).log("Cannot load site header or footer"); } } @@ -60,7 +59,7 @@ public class SiteHeaderFooter { t.load(); template = t; } catch (IOException e) { - log.warn("Cannot refresh site header or footer", e); + logger.atWarning().withCause(e).log("Cannot refresh site header or footer"); t = template; } } From a655fe03a759bf962422ea97cd12522d046670eb Mon Sep 17 00:00:00 2001 From: Edwin Kempin Date: Fri, 4 May 2018 11:50:06 +0200 Subject: [PATCH 3/9] Migrate server classes to Flogger This is the second part of the migration to Flogger. This change migrates all classes of the 'server' module to Flogger. Classes of the 'httpd' module have been migrated by the predecessor change. Other modules continue to use slf4j. They should be migrated by follow-up changes. During this migration we try to make the log statements more consistent: - avoid string concatenation - avoid usage of String.format(...) Change-Id: I233afc8360af7fef8640394204d0d676cc0d0001 Signed-off-by: Edwin Kempin --- .../google/gerrit/server/ApprovalsUtil.java | 14 +-- java/com/google/gerrit/server/BUILD | 2 +- .../server/CreateGroupPermissionSyncer.java | 7 +- .../google/gerrit/server/LibModuleLoader.java | 9 +- .../google/gerrit/server/RequestCleanup.java | 7 +- .../gerrit/server/StarredChangesUtil.java | 16 +-- java/com/google/gerrit/server/WebLinks.java | 9 +- .../server/account/AccountCacheImpl.java | 15 ++- .../server/account/AccountDeactivator.java | 37 ++++--- .../gerrit/server/account/AccountManager.java | 71 ++++++------ .../gerrit/server/account/AccountState.java | 8 +- .../gerrit/server/account/Accounts.java | 7 +- .../gerrit/server/account/GroupCacheImpl.java | 11 +- .../server/account/GroupIncludeCacheImpl.java | 12 +- .../gerrit/server/account/Preferences.java | 11 +- .../server/account/UniversalGroupBackend.java | 13 +-- .../account/VersionedAccountDestinations.java | 8 +- .../account/VersionedAccountQueries.java | 9 +- .../externalids/ExternalIdCacheImpl.java | 7 +- .../account/externalids/ExternalIdNotes.java | 10 +- .../gerrit/server/args4j/ProjectHandler.java | 7 +- .../gerrit/server/audit/AuditService.java | 13 +-- .../gerrit/server/auth/ldap/Helper.java | 25 +++-- .../server/auth/ldap/LdapAuthBackend.java | 11 +- .../server/auth/ldap/LdapGroupBackend.java | 11 +- .../server/auth/ldap/LdapGroupMembership.java | 5 +- .../gerrit/server/auth/ldap/LdapRealm.java | 13 +-- java/com/google/gerrit/server/cache/h2/BUILD | 2 +- .../server/cache/h2/H2CacheFactory.java | 17 ++- .../gerrit/server/cache/h2/H2CacheImpl.java | 41 +++---- .../gerrit/server/change/AbandonOp.java | 7 +- .../gerrit/server/change/AbandonUtil.java | 25 +++-- .../server/change/ChangeCleanupRunner.java | 9 +- .../gerrit/server/change/ChangeInserter.java | 21 ++-- .../gerrit/server/change/ChangeJson.java | 18 +-- .../server/change/ChangeKindCacheImpl.java | 40 ++++--- .../gerrit/server/change/ChangeResource.java | 7 +- .../server/change/ConsistencyChecker.java | 18 +-- .../server/change/EmailReviewComments.java | 7 +- .../server/change/IncludedInResolver.java | 18 ++- .../server/change/MergeabilityCacheImpl.java | 14 +-- .../server/change/PatchSetInserter.java | 10 +- .../gerrit/server/change/RebaseUtil.java | 13 +-- .../gerrit/server/change/SetAssigneeOp.java | 10 +- .../gerrit/server/change/WalkSorter.java | 10 +- .../AdministrateServerGroupsProvider.java | 8 +- .../config/GerritServerConfigProvider.java | 7 +- .../config/GerritServerConfigReloader.java | 9 +- .../gerrit/server/config/GitwebCgiConfig.java | 9 +- .../gerrit/server/config/GitwebConfig.java | 9 +- .../server/config/GroupSetProvider.java | 7 +- .../server/config/PluginConfigFactory.java | 12 +- .../server/config/ProjectConfigEntry.java | 12 +- .../gerrit/server/config/ScheduleConfig.java | 27 ++--- .../config/TrackingFootersProvider.java | 54 ++++----- .../documentation/MarkdownFormatter.java | 9 +- .../QueryDocumentationExecutor.java | 9 +- .../tree/ChangeFileContentModification.java | 10 +- .../gerrit/server/events/EventBroker.java | 9 +- .../gerrit/server/events/EventFactory.java | 24 ++-- .../events/StreamEventsApiListener.java | 33 +++--- .../extensions/events/AssigneeChanged.java | 7 +- .../extensions/events/ChangeAbandoned.java | 9 +- .../extensions/events/ChangeMerged.java | 9 +- .../extensions/events/ChangeRestored.java | 9 +- .../extensions/events/ChangeReverted.java | 7 +- .../extensions/events/CommentAdded.java | 9 +- .../server/extensions/events/EventUtil.java | 39 +++---- .../extensions/events/HashtagsEdited.java | 7 +- .../events/PrivateStateChanged.java | 7 +- .../extensions/events/ReviewerAdded.java | 9 +- .../extensions/events/ReviewerDeleted.java | 9 +- .../extensions/events/RevisionCreated.java | 9 +- .../server/extensions/events/TopicEdited.java | 7 +- .../server/extensions/events/VoteDeleted.java | 9 +- .../events/WorkInProgressStateChanged.java | 7 +- .../server/extensions/webui/UiActions.java | 17 +-- .../gerrit/server/git/GarbageCollection.java | 11 +- .../server/git/GarbageCollectionLogFile.java | 13 ++- .../server/git/GarbageCollectionRunner.java | 7 +- .../gerrit/server/git/GroupCollector.java | 7 +- .../git/LocalDiskRepositoryManager.java | 20 ++-- .../google/gerrit/server/git/MergeUtil.java | 9 +- .../gerrit/server/git/MergedByPushOp.java | 10 +- .../server/git/MultiProgressMonitor.java | 16 +-- .../server/git/SearchingChangeCacheImpl.java | 8 +- java/com/google/gerrit/server/git/TagSet.java | 13 +-- .../google/gerrit/server/git/WorkQueue.java | 12 +- .../git/receive/AsyncReceiveCommits.java | 14 +-- .../google/gerrit/server/git/receive/BUILD | 2 +- .../git/receive/HackPushNegotiateHook.java | 7 +- .../server/git/receive/ReceiveCommits.java | 36 +++--- .../ReceiveCommitsAdvertiseRefsHook.java | 7 +- .../gerrit/server/git/receive/ReplaceOp.java | 16 +-- .../git/validators/CommitValidators.java | 42 +++---- .../git/validators/MergeValidators.java | 11 +- .../validators/RefOperationValidators.java | 8 +- .../server/group/PeriodicGroupIndexer.java | 11 +- .../server/group/db/AuditLogReader.java | 15 ++- .../db/GroupsNoteDbConsistencyChecker.java | 10 +- .../gerrit/server/group/db/RenameGroupOp.java | 34 +++--- .../gerrit/server/index/OnlineReindexer.java | 41 +++---- .../index/account/AllAccountsIndexer.java | 9 +- .../index/change/AllChangesIndexer.java | 28 ++--- .../server/index/change/ChangeField.java | 63 ++++++----- .../server/index/change/ChangeIndexer.java | 20 ++-- .../index/change/ReindexAfterRefUpdate.java | 9 +- .../server/index/change/StalenessChecker.java | 7 +- .../server/index/group/AllGroupsIndexer.java | 9 +- .../index/project/AllProjectsIndexer.java | 8 +- .../server/mail/AutoReplyMailFilter.java | 21 ++-- .../gerrit/server/mail/ListMailFilter.java | 9 +- .../server/mail/receive/ImapMailReceiver.java | 20 ++-- .../server/mail/receive/MailHeaderParser.java | 15 ++- .../server/mail/receive/MailProcessor.java | 61 +++++----- .../server/mail/receive/MailReceiver.java | 14 ++- .../server/mail/receive/Pop3MailReceiver.java | 11 +- .../gerrit/server/mail/send/ChangeEmail.java | 21 ++-- .../server/mail/send/CommentSender.java | 29 +++-- .../server/mail/send/CreateChangeSender.java | 7 +- .../server/mail/send/NotificationEmail.java | 7 +- .../server/mail/send/OutgoingEmail.java | 11 +- .../mail/send/OutgoingEmailValidator.java | 7 +- .../gerrit/server/mail/send/ProjectWatch.java | 16 ++- .../mime/DefaultFileExtensionRegistry.java | 8 +- .../server/mime/MimeUtilFileTypeRegistry.java | 12 +- .../gerrit/server/notedb/ChangeNotes.java | 37 ++++--- .../server/notedb/ChangeNotesParser.java | 9 +- .../server/notedb/DraftCommentNotes.java | 21 ++-- .../server/notedb/PrimaryStorageMigrator.java | 13 ++- .../server/notedb/rebuild/CommentEvent.java | 15 ++- .../notedb/rebuild/DraftCommentEvent.java | 16 +-- .../server/notedb/rebuild/GcAllUsers.java | 7 +- .../server/notedb/rebuild/NoteDbMigrator.java | 86 +++++++++------ .../notedb/rebuild/OnlineNoteDbMigrator.java | 17 +-- .../gerrit/server/patch/AutoMerger.java | 7 +- .../gerrit/server/patch/IntraLineLoader.java | 29 +++-- .../server/patch/PatchListCacheImpl.java | 10 +- .../gerrit/server/patch/PatchListLoader.java | 29 +++-- .../server/patch/PatchScriptFactory.java | 15 ++- java/com/google/gerrit/server/patch/Text.java | 10 +- .../server/permissions/DefaultRefFilter.java | 42 ++++--- .../server/permissions/GlobalPermission.java | 22 ++-- .../server/permissions/PermissionBackend.java | 18 +-- .../server/permissions/SectionSortCache.java | 7 +- .../server/plugins/AutoRegisterModules.java | 27 ++--- .../gerrit/server/plugins/CleanupHandle.java | 20 ++-- .../server/plugins/JarPluginProvider.java | 8 +- .../gerrit/server/plugins/JarScanner.java | 29 ++--- .../server/plugins/PluginCleanerTask.java | 12 +- .../gerrit/server/plugins/PluginLoader.java | 104 ++++++++++-------- .../gerrit/server/plugins/ServerPlugin.java | 11 +- .../UniversalServerPluginProvider.java | 15 ++- .../server/project/CommentLinkProvider.java | 9 +- .../server/project/ConfiguredMimeTypes.java | 12 +- .../server/project/CreateRefControl.java | 10 +- .../gerrit/server/project/GroupList.java | 7 +- .../server/project/ProjectCacheImpl.java | 19 ++-- .../server/project/ProjectCacheWarmer.java | 11 +- .../project/ProjectHierarchyIterator.java | 12 +- .../gerrit/server/project/ProjectState.java | 11 +- .../gerrit/server/project/Reachable.java | 23 ++-- .../google/gerrit/server/project/RefUtil.java | 20 ++-- .../server/project/SubmitRuleEvaluator.java | 16 +-- .../query/account/AccountQueryBuilder.java | 7 +- .../change/ChangeIsVisibleToPredicate.java | 15 ++- .../query/change/OutputStreamQuery.java | 7 +- .../query/change/ParentProjectPredicate.java | 7 +- .../query/change/TrackingIdPredicate.java | 7 +- .../query/group/InternalGroupQuery.java | 7 +- .../server/rules/DefaultSubmitRule.java | 17 ++- .../server/rules/PrologEnvironment.java | 7 +- .../server/rules/PrologRuleEvaluator.java | 17 +-- java/com/google/gerrit/server/schema/BUILD | 2 +- .../gerrit/server/schema/GroupBundle.java | 16 ++- .../schema/JdbcAccountPatchReviewStore.java | 8 +- .../gerrit/server/schema/Schema_154.java | 8 +- .../gerrit/server/schema/Schema_167.java | 29 ++--- .../securestore/SecureStoreProvider.java | 7 +- .../gerrit/server/ssh/SshAddressesModule.java | 7 +- .../gerrit/server/submit/EmailMerge.java | 7 +- .../gerrit/server/submit/GitModules.java | 9 +- .../submit/LocalMergeSuperSetComputation.java | 9 +- .../google/gerrit/server/submit/MergeOp.java | 31 ++---- .../gerrit/server/submit/RebaseSorter.java | 19 ++-- .../gerrit/server/submit/SubmitDryRun.java | 7 +- .../server/submit/SubmitStrategyFactory.java | 7 +- .../server/submit/SubmitStrategyOp.java | 27 ++--- .../gerrit/server/submit/SubmoduleOp.java | 10 +- .../gerrit/server/submit/TestHelperOp.java | 9 +- .../gerrit/server/tools/ToolsCatalog.java | 7 +- .../gerrit/server/update/BatchUpdate.java | 13 +-- .../server/update/ReviewDbBatchUpdate.java | 17 ++- .../gerrit/server/util/MagicBranch.java | 17 ++- .../google/gerrit/server/util/SystemLog.java | 9 +- 195 files changed, 1513 insertions(+), 1514 deletions(-) diff --git a/java/com/google/gerrit/server/ApprovalsUtil.java b/java/com/google/gerrit/server/ApprovalsUtil.java index 8ffe33d3d3..5d5affcfa3 100644 --- a/java/com/google/gerrit/server/ApprovalsUtil.java +++ b/java/com/google/gerrit/server/ApprovalsUtil.java @@ -27,6 +27,7 @@ import com.google.common.collect.ListMultimap; import com.google.common.collect.Lists; import com.google.common.collect.Ordering; import com.google.common.collect.Sets; +import com.google.common.flogger.FluentLogger; import com.google.common.primitives.Shorts; import com.google.gerrit.common.Nullable; import com.google.gerrit.common.data.LabelType; @@ -66,8 +67,6 @@ import java.util.Objects; import java.util.Set; import org.eclipse.jgit.lib.Config; import org.eclipse.jgit.revwalk.RevWalk; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Utility functions to manipulate patchset approvals. @@ -82,7 +81,7 @@ import org.slf4j.LoggerFactory; */ @Singleton public class ApprovalsUtil { - private static final Logger log = LoggerFactory.getLogger(ApprovalsUtil.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final Ordering SORT_APPROVALS = Ordering.from(comparing(PatchSetApproval::getGranted)); @@ -271,11 +270,12 @@ public class ApprovalsUtil { .database(db) .test(ChangePermission.READ); } catch (IOException | PermissionBackendException e) { - log.warn( - String.format( + logger + .atWarning() + .withCause(e) + .log( "Failed to check if account %d can see change %d", - accountId.get(), notes.getChangeId().get()), - e); + accountId.get(), notes.getChangeId().get()); return false; } } diff --git a/java/com/google/gerrit/server/BUILD b/java/com/google/gerrit/server/BUILD index ab2c26bcbc..280a4670d5 100644 --- a/java/com/google/gerrit/server/BUILD +++ b/java/com/google/gerrit/server/BUILD @@ -71,13 +71,13 @@ java_library( "//lib/commons:lang", "//lib/commons:net", "//lib/commons:validator", + "//lib/flogger:api", "//lib/guice", "//lib/guice:guice-assistedinject", "//lib/guice:guice-servlet", "//lib/jgit/org.eclipse.jgit.archive:jgit-archive", "//lib/jgit/org.eclipse.jgit:jgit", "//lib/jsoup", - "//lib/log:api", "//lib/log:jsonevent-layout", "//lib/log:log4j", "//lib/lucene:lucene-analyzers-common", diff --git a/java/com/google/gerrit/server/CreateGroupPermissionSyncer.java b/java/com/google/gerrit/server/CreateGroupPermissionSyncer.java index 40800b4096..b7bc0364a4 100644 --- a/java/com/google/gerrit/server/CreateGroupPermissionSyncer.java +++ b/java/com/google/gerrit/server/CreateGroupPermissionSyncer.java @@ -18,6 +18,7 @@ import static com.google.common.base.Preconditions.checkNotNull; import static java.util.stream.Collectors.toList; import com.google.common.collect.Sets; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.AccessSection; import com.google.gerrit.common.data.Permission; import com.google.gerrit.common.data.PermissionRule; @@ -36,8 +37,6 @@ import java.io.IOException; import java.util.HashSet; import java.util.Set; import org.eclipse.jgit.errors.ConfigInvalidException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * With groups in NoteDb, the capability of creating a group is expressed as a {@code CREATE} @@ -52,7 +51,7 @@ import org.slf4j.LoggerFactory; */ @Singleton public class CreateGroupPermissionSyncer implements ChangeMergedListener { - private static final Logger log = LoggerFactory.getLogger(CreateGroupPermissionSyncer.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final AllProjectsName allProjects; private final AllUsersName allUsers; @@ -135,7 +134,7 @@ public class CreateGroupPermissionSyncer implements ChangeMergedListener { try { syncIfNeeded(); } catch (IOException | ConfigInvalidException e) { - log.error("Can't sync create group permissions", e); + logger.atSevere().withCause(e).log("Can't sync create group permissions"); } } } diff --git a/java/com/google/gerrit/server/LibModuleLoader.java b/java/com/google/gerrit/server/LibModuleLoader.java index 4ec7d2d9c6..d1067e1784 100644 --- a/java/com/google/gerrit/server/LibModuleLoader.java +++ b/java/com/google/gerrit/server/LibModuleLoader.java @@ -16,6 +16,7 @@ package com.google.gerrit.server; import static java.util.stream.Collectors.toList; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.server.config.GerritServerConfig; import com.google.inject.Injector; import com.google.inject.Key; @@ -24,12 +25,10 @@ import com.google.inject.ProvisionException; import java.util.Arrays; import java.util.List; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Loads configured Guice modules from {@code gerrit.installModule}. */ public class LibModuleLoader { - private static final Logger log = LoggerFactory.getLogger(LibModuleLoader.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static List loadModules(Injector parent) { Config cfg = getConfig(parent); @@ -44,7 +43,7 @@ public class LibModuleLoader { private static Module createModule(Injector injector, String className) { Module m = injector.getInstance(loadModule(className)); - log.info("Installed module {}", className); + logger.atInfo().log("Installed module %s", className); return m; } @@ -54,7 +53,7 @@ public class LibModuleLoader { return (Class) Class.forName(className); } catch (ClassNotFoundException | LinkageError e) { String msg = "Cannot load LibModule " + className; - log.error(msg, e); + logger.atSevere().withCause(e).log(msg); throw new ProvisionException(msg, e); } } diff --git a/java/com/google/gerrit/server/RequestCleanup.java b/java/com/google/gerrit/server/RequestCleanup.java index ea60682d2c..7ed9287c80 100644 --- a/java/com/google/gerrit/server/RequestCleanup.java +++ b/java/com/google/gerrit/server/RequestCleanup.java @@ -14,17 +14,16 @@ package com.google.gerrit.server; +import com.google.common.flogger.FluentLogger; import com.google.inject.servlet.RequestScoped; import java.util.Iterator; import java.util.LinkedList; import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Registers cleanup activities to be completed when a scope ends. */ @RequestScoped public class RequestCleanup implements Runnable { - private static final Logger log = LoggerFactory.getLogger(RequestCleanup.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final List cleanup = new LinkedList<>(); private boolean ran; @@ -47,7 +46,7 @@ public class RequestCleanup implements Runnable { try { i.next().run(); } catch (Throwable err) { - log.error("Failed to execute per-request cleanup", err); + logger.atSevere().withCause(err).log("Failed to execute per-request cleanup"); } i.remove(); } diff --git a/java/com/google/gerrit/server/StarredChangesUtil.java b/java/com/google/gerrit/server/StarredChangesUtil.java index e2c08ceeac..3b8aaf42bc 100644 --- a/java/com/google/gerrit/server/StarredChangesUtil.java +++ b/java/com/google/gerrit/server/StarredChangesUtil.java @@ -28,6 +28,7 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSortedSet; import com.google.common.collect.Sets; +import com.google.common.flogger.FluentLogger; import com.google.common.primitives.Ints; import com.google.gerrit.common.Nullable; import com.google.gerrit.reviewdb.client.Account; @@ -70,11 +71,11 @@ import org.eclipse.jgit.lib.RefUpdate; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.transport.ReceiveCommand; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class StarredChangesUtil { + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + @AutoValue public abstract static class StarField { private static final String SEPARATOR = ":"; @@ -154,8 +155,6 @@ public class StarredChangesUtil { } } - private static final Logger log = LoggerFactory.getLogger(StarredChangesUtil.class); - public static final String DEFAULT_LABEL = "star"; public static final String IGNORE_LABEL = "ignore"; public static final String REVIEWED_LABEL = "reviewed"; @@ -305,11 +304,12 @@ public class StarredChangesUtil { Ref ref = repo.exactRef(RefNames.refsStarredChanges(changeId, accountId)); return ref != null ? ref.getObjectId() : ObjectId.zeroId(); } catch (IOException e) { - log.error( - String.format( + logger + .atSevere() + .withCause(e) + .log( "Getting star object ID for account %d on change %d failed", - accountId.get(), changeId.get()), - e); + accountId.get(), changeId.get()); return ObjectId.zeroId(); } } diff --git a/java/com/google/gerrit/server/WebLinks.java b/java/com/google/gerrit/server/WebLinks.java index dacbe37b1a..39a2328ed1 100644 --- a/java/com/google/gerrit/server/WebLinks.java +++ b/java/com/google/gerrit/server/WebLinks.java @@ -18,6 +18,7 @@ import com.google.common.base.Function; import com.google.common.base.Predicate; import com.google.common.base.Strings; import com.google.common.collect.FluentIterable; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.WebLinkInfoCommon; import com.google.gerrit.extensions.common.DiffWebLinkInfo; import com.google.gerrit.extensions.common.WebLinkInfo; @@ -37,19 +38,17 @@ import com.google.inject.Inject; import com.google.inject.Singleton; import java.util.Collections; import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class WebLinks { - private static final Logger log = LoggerFactory.getLogger(WebLinks.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final Predicate INVALID_WEBLINK = link -> { if (link == null) { return false; } else if (Strings.isNullOrEmpty(link.name) || Strings.isNullOrEmpty(link.url)) { - log.warn("{} is missing name and/or url", link.getClass().getName()); + logger.atWarning().log("%s is missing name and/or url", link.getClass().getName()); return false; } return true; @@ -60,7 +59,7 @@ public class WebLinks { if (link == null) { return false; } else if (Strings.isNullOrEmpty(link.name) || Strings.isNullOrEmpty(link.url)) { - log.warn("{} is missing name and/or url", link.getClass().getName()); + logger.atWarning().log("%s is missing name and/or url", link.getClass().getName()); return false; } return true; diff --git a/java/com/google/gerrit/server/account/AccountCacheImpl.java b/java/com/google/gerrit/server/account/AccountCacheImpl.java index 0648f9fe88..76bfcfdaff 100644 --- a/java/com/google/gerrit/server/account/AccountCacheImpl.java +++ b/java/com/google/gerrit/server/account/AccountCacheImpl.java @@ -19,6 +19,7 @@ import static com.google.gerrit.server.account.externalids.ExternalId.SCHEME_USE import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import com.google.common.collect.ImmutableMap; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.common.TimeUtil; import com.google.gerrit.reviewdb.client.Account; @@ -44,13 +45,11 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; import org.eclipse.jgit.errors.ConfigInvalidException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Caches important (but small) account state to avoid database hits. */ @Singleton public class AccountCacheImpl implements AccountCache { - private static final Logger log = LoggerFactory.getLogger(AccountCacheImpl.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final String BYID_NAME = "accounts"; @@ -89,7 +88,7 @@ public class AccountCacheImpl implements AccountCache { try { return byId.get(accountId).orElse(missing(accountId)); } catch (ExecutionException e) { - log.warn("Cannot load AccountState for " + accountId, e); + logger.atWarning().withCause(e).log("Cannot load AccountState for %s", accountId); return missing(accountId); } } @@ -99,7 +98,7 @@ public class AccountCacheImpl implements AccountCache { try { return byId.get(accountId); } catch (ExecutionException e) { - log.warn("Cannot load AccountState for ID " + accountId, e); + logger.atWarning().withCause(e).log("Cannot load AccountState for ID %s", accountId); return null; } } @@ -126,14 +125,14 @@ public class AccountCacheImpl implements AccountCache { try { futures = executor.invokeAll(callables); } catch (InterruptedException e) { - log.error("Cannot load AccountStates", e); + logger.atSevere().withCause(e).log("Cannot load AccountStates"); return ImmutableMap.of(); } for (Future> f : futures) { try { f.get().ifPresent(s -> accountStates.put(s.getAccount().getId(), s)); } catch (InterruptedException | ExecutionException e) { - log.error("Cannot load AccountState", e); + logger.atSevere().withCause(e).log("Cannot load AccountState"); } } return accountStates; @@ -147,7 +146,7 @@ public class AccountCacheImpl implements AccountCache { .map(e -> get(e.accountId())) .orElseGet(Optional::empty); } catch (IOException | ConfigInvalidException e) { - log.warn("Cannot load AccountState for username " + username, e); + logger.atWarning().withCause(e).log("Cannot load AccountState for username %s", username); return null; } } diff --git a/java/com/google/gerrit/server/account/AccountDeactivator.java b/java/com/google/gerrit/server/account/AccountDeactivator.java index 73c47ad8cc..abe3198640 100644 --- a/java/com/google/gerrit/server/account/AccountDeactivator.java +++ b/java/com/google/gerrit/server/account/AccountDeactivator.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.account; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.events.LifecycleListener; import com.google.gerrit.extensions.restapi.ResourceConflictException; import com.google.gerrit.lifecycle.LifecycleModule; @@ -27,12 +28,10 @@ import com.google.inject.Inject; import com.google.inject.Provider; import java.util.Optional; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Runnable to enable scheduling account deactivations to run periodically */ public class AccountDeactivator implements Runnable { - private static final Logger log = LoggerFactory.getLogger(AccountDeactivator.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static class Module extends LifecycleModule { @Override @@ -84,7 +83,7 @@ public class AccountDeactivator implements Runnable { @Override public void run() { - log.info("Running account deactivations"); + logger.atInfo().log("Running account deactivations"); try { int numberOfAccountsDeactivated = 0; for (AccountState acc : accountQueryProvider.get().query(AccountPredicates.isActive())) { @@ -92,10 +91,16 @@ public class AccountDeactivator implements Runnable { numberOfAccountsDeactivated++; } } - log.info( - "Deactivations complete, {} account(s) were deactivated", numberOfAccountsDeactivated); + logger + .atInfo() + .log( + "Deactivations complete, %d account(s) were deactivated", + numberOfAccountsDeactivated); } catch (Exception e) { - log.error("Failed to complete deactivation of accounts: " + e.getMessage(), e); + logger + .atSevere() + .withCause(e) + .log("Failed to complete deactivation of accounts: %s", e.getMessage()); } } @@ -105,22 +110,22 @@ public class AccountDeactivator implements Runnable { } String userName = accountState.getUserName().get(); - log.debug("processing account " + userName); + logger.atFine().log("processing account %s", userName); try { if (realm.accountBelongsToRealm(accountState.getExternalIds()) && !realm.isActive(userName)) { sif.deactivate(accountState.getAccount().getId()); - log.info("deactivated account " + userName); + logger.atInfo().log("deactivated account %s", userName); return true; } } catch (ResourceConflictException e) { - log.info("Account {} already deactivated, continuing...", userName); + logger.atInfo().log("Account %s already deactivated, continuing...", userName); } catch (Exception e) { - log.error( - "Error deactivating account: {} ({}) {}", - userName, - accountState.getAccount().getId(), - e.getMessage(), - e); + logger + .atSevere() + .withCause(e) + .log( + "Error deactivating account: %s (%s) %s", + userName, accountState.getAccount().getId(), e.getMessage()); } return false; } diff --git a/java/com/google/gerrit/server/account/AccountManager.java b/java/com/google/gerrit/server/account/AccountManager.java index 009623a69c..9722be7964 100644 --- a/java/com/google/gerrit/server/account/AccountManager.java +++ b/java/com/google/gerrit/server/account/AccountManager.java @@ -21,6 +21,7 @@ import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.AccessSection; import com.google.gerrit.common.data.GlobalCapability; import com.google.gerrit.common.data.Permission; @@ -56,13 +57,11 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Consumer; import org.eclipse.jgit.errors.ConfigInvalidException; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Tracks authentication related details for user accounts. */ @Singleton public class AccountManager { - private static final Logger log = LoggerFactory.getLogger(AccountManager.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final Sequences sequences; private final Accounts accounts; @@ -144,24 +143,27 @@ public class AccountManager { // An inconsistency is detected in the database, having a record for scheme "username:" // but no record for scheme "gerrit:". Try to recover by linking // "gerrit:" identity to the existing account. - log.warn( - "User {} already has an account; link new identity to the existing account.", - who.getUserName()); + logger + .atWarning() + .log( + "User %s already has an account; link new identity to the existing account.", + who.getUserName()); return link(existingId.get().accountId(), who); } } // New account, automatically create and return. - log.debug("External ID not found. Attempting to create new account."); + logger.atFine().log("External ID not found. Attempting to create new account."); return create(who); } ExternalId extId = optionalExtId.get(); Optional accountState = byIdCache.get(extId.accountId()); if (!accountState.isPresent()) { - log.error( - "Authentication with external ID {} failed. Account {} doesn't exist.", - extId.key().get(), - extId.accountId().get()); + logger + .atSevere() + .log( + "Authentication with external ID %s failed. Account %s doesn't exist.", + extId.key().get(), extId.accountId().get()); throw new AccountException("Authentication error, account not found"); } @@ -195,12 +197,14 @@ public class AccountManager { } setInactiveFlag.deactivate(extId.get().accountId()); } catch (Exception e) { - log.error( - "Unable to deactivate account " - + authRequest + logger + .atSevere() + .withCause(e) + .log( + "Unable to deactivate account %s", + authRequest .getUserName() - .orElse(" for external ID key " + authRequest.getExternalIdKey().get()), - e); + .orElse(" for external ID key " + authRequest.getExternalIdKey().get())); } } @@ -261,12 +265,13 @@ public class AccountManager { && who.getUserName().isPresent() && !who.getUserName().equals(user.getUserName())) { if (user.getUserName().isPresent()) { - log.warn( - "Not changing already set username {} to {}", - user.getUserName().get(), - who.getUserName().get()); + logger + .atWarning() + .log( + "Not changing already set username %s to %s", + user.getUserName().get(), who.getUserName().get()); } else { - log.warn("Not setting username to {}", who.getUserName().get()); + logger.atWarning().log("Not setting username to %s", who.getUserName().get()); } } @@ -285,11 +290,11 @@ public class AccountManager { private AuthResult create(AuthRequest who) throws OrmException, AccountException, IOException, ConfigInvalidException { Account.Id newId = new Account.Id(sequences.nextAccountId()); - log.debug("Assigning new Id {} to account", newId); + logger.atFine().log("Assigning new Id %s to account", newId); ExternalId extId = ExternalId.createWithEmail(who.getExternalIdKey(), newId, who.getEmailAddress()); - log.debug("Created external Id: {}", extId); + logger.atFine().log("Created external Id: %s", extId); checkEmailNotUsed(extId); ExternalId userNameExtId = who.getUserName().isPresent() ? createUsername(newId, who.getUserName().get()) : null; @@ -376,13 +381,15 @@ public class AccountManager { return; } - log.warn( - "Email {} is already assigned to account {};" - + " cannot create external ID {} with the same email for account {}.", - email, - existingExtIdsWithEmail.iterator().next().accountId().get(), - extIdToBeCreated.key().get(), - extIdToBeCreated.accountId().get()); + logger + .atWarning() + .log( + "Email %s is already assigned to account %s;" + + " cannot create external ID %s with the same email for account %s.", + email, + existingExtIdsWithEmail.iterator().next().accountId().get(), + extIdToBeCreated.key().get(), + extIdToBeCreated.accountId().get()); throw new AccountException("Email '" + email + "' in use by another account"); } @@ -414,7 +421,7 @@ public class AccountManager { public AuthResult link(Account.Id to, AuthRequest who) throws AccountException, OrmException, IOException, ConfigInvalidException { Optional optionalExtId = externalIds.get(who.getExternalIdKey()); - log.debug("Link another authentication identity to an existing account"); + logger.atFine().log("Link another authentication identity to an existing account"); if (optionalExtId.isPresent()) { ExternalId extId = optionalExtId.get(); if (!extId.accountId().equals(to)) { @@ -423,7 +430,7 @@ public class AccountManager { } update(who, extId); } else { - log.debug("Linking new external ID to the existing account"); + logger.atFine().log("Linking new external ID to the existing account"); ExternalId newExtId = ExternalId.createWithEmail(who.getExternalIdKey(), to, who.getEmailAddress()); checkEmailNotUsed(newExtId); diff --git a/java/com/google/gerrit/server/account/AccountState.java b/java/com/google/gerrit/server/account/AccountState.java index 14a0e92417..e56ad72652 100644 --- a/java/com/google/gerrit/server/account/AccountState.java +++ b/java/com/google/gerrit/server/account/AccountState.java @@ -23,6 +23,7 @@ import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.extensions.client.DiffPreferencesInfo; import com.google.gerrit.extensions.client.EditPreferencesInfo; @@ -41,8 +42,6 @@ import java.util.Collection; import java.util.Optional; import org.apache.commons.codec.DecoderException; import org.eclipse.jgit.lib.ObjectId; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Superset of all information related to an Account. This includes external IDs, project watches, @@ -52,7 +51,7 @@ import org.slf4j.LoggerFactory; * account cache (see {@link AccountCache#get(Account.Id)}). */ public class AccountState { - private static final Logger logger = LoggerFactory.getLogger(AccountState.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static final Function ACCOUNT_ID_FUNCTION = a -> a.getAccount().getId(); @@ -224,8 +223,7 @@ public class AccountState { try { return HashedPassword.decode(hashedStr).checkPassword(password); } catch (DecoderException e) { - logger.error( - String.format("DecoderException for user %s: %s ", username, e.getMessage())); + logger.atSevere().log("DecoderException for user %s: %s ", username, e.getMessage()); return false; } } diff --git a/java/com/google/gerrit/server/account/Accounts.java b/java/com/google/gerrit/server/account/Accounts.java index 62b1d87e3e..7dff74c106 100644 --- a/java/com/google/gerrit/server/account/Accounts.java +++ b/java/com/google/gerrit/server/account/Accounts.java @@ -18,6 +18,7 @@ import static java.util.Comparator.comparing; import static java.util.stream.Collectors.toList; import static java.util.stream.Collectors.toSet; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.reviewdb.client.RefNames; import com.google.gerrit.server.account.externalids.ExternalIds; @@ -35,13 +36,11 @@ import java.util.Set; import java.util.stream.Stream; import org.eclipse.jgit.errors.ConfigInvalidException; import org.eclipse.jgit.lib.Repository; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Class to access accounts. */ @Singleton public class Accounts { - private static final Logger log = LoggerFactory.getLogger(Accounts.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final GitRepositoryManager repoManager; private final AllUsersName allUsersName; @@ -85,7 +84,7 @@ public class Accounts { try { read(repo, accountId).ifPresent(accounts::add); } catch (Exception e) { - log.error(String.format("Ignoring invalid account %s", accountId.get()), e); + logger.atSevere().withCause(e).log("Ignoring invalid account %s", accountId); } } } diff --git a/java/com/google/gerrit/server/account/GroupCacheImpl.java b/java/com/google/gerrit/server/account/GroupCacheImpl.java index 56c9f767bf..e7aae15b67 100644 --- a/java/com/google/gerrit/server/account/GroupCacheImpl.java +++ b/java/com/google/gerrit/server/account/GroupCacheImpl.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.account; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.reviewdb.client.AccountGroup; import com.google.gerrit.server.cache.CacheModule; import com.google.gerrit.server.group.InternalGroup; @@ -29,13 +30,11 @@ import com.google.inject.TypeLiteral; import com.google.inject.name.Named; import java.util.Optional; import java.util.concurrent.ExecutionException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Tracks group objects in memory for efficient access. */ @Singleton public class GroupCacheImpl implements GroupCache { - private static final Logger log = LoggerFactory.getLogger(GroupCacheImpl.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final String BYID_NAME = "groups"; private static final String BYNAME_NAME = "groups_byname"; @@ -82,7 +81,7 @@ public class GroupCacheImpl implements GroupCache { try { return byId.get(groupId); } catch (ExecutionException e) { - log.warn("Cannot load group {}", groupId, e); + logger.atWarning().withCause(e).log("Cannot load group %s", groupId); return Optional.empty(); } } @@ -95,7 +94,7 @@ public class GroupCacheImpl implements GroupCache { try { return byName.get(name.get()); } catch (ExecutionException e) { - log.warn("Cannot look up group {} by name", name.get(), e); + logger.atWarning().withCause(e).log("Cannot look up group %s by name", name.get()); return Optional.empty(); } } @@ -109,7 +108,7 @@ public class GroupCacheImpl implements GroupCache { try { return byUUID.get(groupUuid.get()); } catch (ExecutionException e) { - log.warn("Cannot look up group {} by uuid", groupUuid.get(), e); + logger.atWarning().withCause(e).log("Cannot look up group %s by uuid", groupUuid.get()); return Optional.empty(); } } diff --git a/java/com/google/gerrit/server/account/GroupIncludeCacheImpl.java b/java/com/google/gerrit/server/account/GroupIncludeCacheImpl.java index ba81c6a39b..f262a798f8 100644 --- a/java/com/google/gerrit/server/account/GroupIncludeCacheImpl.java +++ b/java/com/google/gerrit/server/account/GroupIncludeCacheImpl.java @@ -21,6 +21,7 @@ import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.reviewdb.client.AccountGroup; import com.google.gerrit.server.cache.CacheModule; @@ -37,13 +38,12 @@ import com.google.inject.name.Named; import java.util.Collection; import java.util.Collections; import java.util.concurrent.ExecutionException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Tracks group inclusions in memory for efficient access. */ @Singleton public class GroupIncludeCacheImpl implements GroupIncludeCache { - private static final Logger log = LoggerFactory.getLogger(GroupIncludeCacheImpl.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + private static final String PARENT_GROUPS_NAME = "groups_bysubgroup"; private static final String GROUPS_WITH_MEMBER_NAME = "groups_bymember"; private static final String EXTERNAL_NAME = "groups_external"; @@ -94,7 +94,7 @@ public class GroupIncludeCacheImpl implements GroupIncludeCache { try { return groupsWithMember.get(memberId); } catch (ExecutionException e) { - log.warn(String.format("Cannot load groups containing %d as member", memberId.get())); + logger.atWarning().withCause(e).log("Cannot load groups containing %s as member", memberId); return ImmutableSet.of(); } } @@ -104,7 +104,7 @@ public class GroupIncludeCacheImpl implements GroupIncludeCache { try { return parentGroups.get(groupId); } catch (ExecutionException e) { - log.warn("Cannot load included groups", e); + logger.atWarning().withCause(e).log("Cannot load included groups"); return Collections.emptySet(); } } @@ -132,7 +132,7 @@ public class GroupIncludeCacheImpl implements GroupIncludeCache { try { return external.get(EXTERNAL_NAME); } catch (ExecutionException e) { - log.warn("Cannot load set of non-internal groups", e); + logger.atWarning().withCause(e).log("Cannot load set of non-internal groups"); return ImmutableList.of(); } } diff --git a/java/com/google/gerrit/server/account/Preferences.java b/java/com/google/gerrit/server/account/Preferences.java index 07793bbaf4..aa096755aa 100644 --- a/java/com/google/gerrit/server/account/Preferences.java +++ b/java/com/google/gerrit/server/account/Preferences.java @@ -30,6 +30,7 @@ import static com.google.gerrit.server.git.UserConfigSections.URL_ALIAS; import com.google.common.base.Strings; import com.google.common.collect.Lists; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.extensions.client.DiffPreferencesInfo; import com.google.gerrit.extensions.client.EditPreferencesInfo; @@ -54,8 +55,6 @@ import org.eclipse.jgit.errors.ConfigInvalidException; import org.eclipse.jgit.lib.CommitBuilder; import org.eclipse.jgit.lib.Config; import org.eclipse.jgit.lib.Repository; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Parses/writes preferences from/to a {@link Config} file. @@ -86,7 +85,7 @@ import org.slf4j.LoggerFactory; *

The preferences are lazily parsed. */ public class Preferences { - private static final Logger log = LoggerFactory.getLogger(Preferences.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static final String PREFERENCES_CONFIG = "preferences.config"; @@ -339,7 +338,7 @@ public class Preferences { } } } catch (IllegalAccessException e) { - log.error("Failed to apply default general preferences", e); + logger.atSevere().withCause(e).log("Failed to apply default general preferences"); return GeneralPreferencesInfo.defaults(); } return result; @@ -358,7 +357,7 @@ public class Preferences { } } } catch (IllegalAccessException e) { - log.error("Failed to apply default diff preferences", e); + logger.atSevere().withCause(e).log("Failed to apply default diff preferences"); return DiffPreferencesInfo.defaults(); } return result; @@ -377,7 +376,7 @@ public class Preferences { } } } catch (IllegalAccessException e) { - log.error("Failed to apply default edit preferences", e); + logger.atSevere().withCause(e).log("Failed to apply default edit preferences"); return EditPreferencesInfo.defaults(); } return result; diff --git a/java/com/google/gerrit/server/account/UniversalGroupBackend.java b/java/com/google/gerrit/server/account/UniversalGroupBackend.java index fc9b58a3b4..22e9dbd252 100644 --- a/java/com/google/gerrit/server/account/UniversalGroupBackend.java +++ b/java/com/google/gerrit/server/account/UniversalGroupBackend.java @@ -22,6 +22,7 @@ import com.google.common.collect.Iterables; import com.google.common.collect.ListMultimap; import com.google.common.collect.MultimapBuilder; import com.google.common.collect.Sets; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.common.data.GroupDescription; import com.google.gerrit.common.data.GroupReference; @@ -39,15 +40,13 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Universal implementation of the GroupBackend that works with the injected set of GroupBackends. */ @Singleton public class UniversalGroupBackend implements GroupBackend { - private static final Logger log = LoggerFactory.getLogger(UniversalGroupBackend.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final DynamicSet backends; @@ -80,7 +79,7 @@ public class UniversalGroupBackend implements GroupBackend { } GroupBackend b = backend(uuid); if (b == null) { - log.debug("Unknown GroupBackend for UUID: " + uuid); + logger.atFine().log("Unknown GroupBackend for UUID: %s", uuid); return null; } return b.get(uuid); @@ -130,7 +129,7 @@ public class UniversalGroupBackend implements GroupBackend { } GroupMembership m = membership(uuid); if (m == null) { - log.debug("Unknown GroupMembership for UUID: " + uuid); + logger.atFine().log("Unknown GroupMembership for UUID: %s", uuid); return false; } return m.contains(uuid); @@ -146,7 +145,7 @@ public class UniversalGroupBackend implements GroupBackend { } GroupMembership m = membership(uuid); if (m == null) { - log.debug("Unknown GroupMembership for UUID: " + uuid); + logger.atFine().log("Unknown GroupMembership for UUID: %s", uuid); continue; } lookups.put(m, uuid); @@ -176,7 +175,7 @@ public class UniversalGroupBackend implements GroupBackend { } GroupMembership m = membership(uuid); if (m == null) { - log.debug("Unknown GroupMembership for UUID: " + uuid); + logger.atFine().log("Unknown GroupMembership for UUID: %s", uuid); continue; } lookups.put(m, uuid); diff --git a/java/com/google/gerrit/server/account/VersionedAccountDestinations.java b/java/com/google/gerrit/server/account/VersionedAccountDestinations.java index 106454633f..e2f1bc222c 100644 --- a/java/com/google/gerrit/server/account/VersionedAccountDestinations.java +++ b/java/com/google/gerrit/server/account/VersionedAccountDestinations.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.account; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.reviewdb.client.RefNames; import com.google.gerrit.server.git.meta.VersionedMetaData; @@ -21,12 +22,10 @@ import java.io.IOException; import org.eclipse.jgit.errors.ConfigInvalidException; import org.eclipse.jgit.lib.CommitBuilder; import org.eclipse.jgit.lib.FileMode; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** User configured named destinations. */ public class VersionedAccountDestinations extends VersionedMetaData { - private static final Logger log = LoggerFactory.getLogger(VersionedAccountDestinations.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static VersionedAccountDestinations forUser(Account.Id id) { return new VersionedAccountDestinations(RefNames.refsUsers(id)); @@ -62,7 +61,8 @@ public class VersionedAccountDestinations extends VersionedMetaData { destinations.parseLabel( label, readUTF8(path), - error -> log.error("Error parsing file {}: {}", path, error.getMessage())); + error -> + logger.atSevere().log("Error parsing file %s: %s", path, error.getMessage())); } } } diff --git a/java/com/google/gerrit/server/account/VersionedAccountQueries.java b/java/com/google/gerrit/server/account/VersionedAccountQueries.java index b021d24c23..eb3f5e6b3a 100644 --- a/java/com/google/gerrit/server/account/VersionedAccountQueries.java +++ b/java/com/google/gerrit/server/account/VersionedAccountQueries.java @@ -14,18 +14,17 @@ package com.google.gerrit.server.account; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.reviewdb.client.RefNames; import com.google.gerrit.server.git.meta.VersionedMetaData; import java.io.IOException; import org.eclipse.jgit.errors.ConfigInvalidException; import org.eclipse.jgit.lib.CommitBuilder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Named Queries for user accounts. */ public class VersionedAccountQueries extends VersionedMetaData { - private static final Logger log = LoggerFactory.getLogger(VersionedAccountQueries.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static VersionedAccountQueries forUser(Account.Id id) { return new VersionedAccountQueries(RefNames.refsUsers(id)); @@ -53,7 +52,9 @@ public class VersionedAccountQueries extends VersionedMetaData { QueryList.parse( readUTF8(QueryList.FILE_NAME), error -> - log.error("Error parsing file {}: {}", QueryList.FILE_NAME, error.getMessage())); + logger + .atSevere() + .log("Error parsing file %s: %s", QueryList.FILE_NAME, error.getMessage())); } @Override diff --git a/java/com/google/gerrit/server/account/externalids/ExternalIdCacheImpl.java b/java/com/google/gerrit/server/account/externalids/ExternalIdCacheImpl.java index 1f77773a28..c23dd99b79 100644 --- a/java/com/google/gerrit/server/account/externalids/ExternalIdCacheImpl.java +++ b/java/com/google/gerrit/server/account/externalids/ExternalIdCacheImpl.java @@ -25,6 +25,7 @@ import com.google.common.collect.Multimap; import com.google.common.collect.MultimapBuilder; import com.google.common.collect.Multimaps; import com.google.common.collect.SetMultimap; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.reviewdb.client.Account; import com.google.inject.Inject; import com.google.inject.Singleton; @@ -36,13 +37,11 @@ import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import java.util.function.Consumer; import org.eclipse.jgit.lib.ObjectId; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Caches external IDs of all accounts. The external IDs are always loaded from NoteDb. */ @Singleton class ExternalIdCacheImpl implements ExternalIdCache { - private static final Logger log = LoggerFactory.getLogger(ExternalIdCacheImpl.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final LoadingCache extIdsByAccount; private final ExternalIdReader externalIdReader; @@ -154,7 +153,7 @@ class ExternalIdCacheImpl implements ExternalIdCache { update.accept(m); extIdsByAccount.put(newNotesRev, AllExternalIds.create(m)); } catch (ExecutionException e) { - log.warn("Cannot update external IDs", e); + logger.atWarning().withCause(e).log("Cannot update external IDs"); } finally { lock.unlock(); } diff --git a/java/com/google/gerrit/server/account/externalids/ExternalIdNotes.java b/java/com/google/gerrit/server/account/externalids/ExternalIdNotes.java index 1a3d960699..5ef81b0d2d 100644 --- a/java/com/google/gerrit/server/account/externalids/ExternalIdNotes.java +++ b/java/com/google/gerrit/server/account/externalids/ExternalIdNotes.java @@ -26,6 +26,7 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.common.collect.Sets; import com.google.common.collect.Streams; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.metrics.Counter0; import com.google.gerrit.metrics.Description; @@ -60,8 +61,6 @@ import org.eclipse.jgit.notes.NoteMap; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevTree; import org.eclipse.jgit.revwalk.RevWalk; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * {@link VersionedMetaData} subclass to update external IDs. @@ -85,7 +84,7 @@ import org.slf4j.LoggerFactory; * accounts for which external IDs have been updated (see {@link #updateCaches()}). */ public class ExternalIdNotes extends VersionedMetaData { - private static final Logger log = LoggerFactory.getLogger(ExternalIdNotes.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final int MAX_NOTE_SZ = 1 << 19; @@ -358,7 +357,10 @@ public class ExternalIdNotes extends VersionedMetaData { try { b.add(ExternalId.parse(note.getName(), raw, note.getData())); } catch (ConfigInvalidException | RuntimeException e) { - log.error(String.format("Ignoring invalid external ID note %s", note.getName()), e); + logger + .atSevere() + .withCause(e) + .log("Ignoring invalid external ID note %s", note.getName()); } } return b.build(); diff --git a/java/com/google/gerrit/server/args4j/ProjectHandler.java b/java/com/google/gerrit/server/args4j/ProjectHandler.java index 1d40b53ce4..7872812b6c 100644 --- a/java/com/google/gerrit/server/args4j/ProjectHandler.java +++ b/java/com/google/gerrit/server/args4j/ProjectHandler.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.args4j; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.ProjectUtil; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.reviewdb.client.Project; @@ -32,11 +33,9 @@ import org.kohsuke.args4j.OptionDef; import org.kohsuke.args4j.spi.OptionHandler; import org.kohsuke.args4j.spi.Parameters; import org.kohsuke.args4j.spi.Setter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class ProjectHandler extends OptionHandler { - private static final Logger log = LoggerFactory.getLogger(ProjectHandler.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final ProjectCache projectCache; private final PermissionBackend permissionBackend; @@ -89,7 +88,7 @@ public class ProjectHandler extends OptionHandler { } catch (AuthException e) { throw new CmdLineException(owner, new NoSuchProjectException(nameKey).getMessage()); } catch (PermissionBackendException | IOException e) { - log.warn("Cannot load project " + nameWithoutSuffix, e); + logger.atWarning().withCause(e).log("Cannot load project %s", nameWithoutSuffix); throw new CmdLineException(owner, new NoSuchProjectException(nameKey).getMessage()); } diff --git a/java/com/google/gerrit/server/audit/AuditService.java b/java/com/google/gerrit/server/audit/AuditService.java index bd51824a4e..9528670ae1 100644 --- a/java/com/google/gerrit/server/audit/AuditService.java +++ b/java/com/google/gerrit/server/audit/AuditService.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.audit; import com.google.common.collect.ImmutableSet; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.registration.DynamicSet; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.reviewdb.client.AccountGroup; @@ -24,12 +25,10 @@ import com.google.gerrit.server.audit.group.GroupSubgroupAuditEvent; import com.google.inject.Inject; import com.google.inject.Singleton; import java.sql.Timestamp; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class AuditService { - private static final Logger log = LoggerFactory.getLogger(AuditService.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final DynamicSet auditListeners; private final DynamicSet groupAuditListeners; @@ -59,7 +58,7 @@ public class AuditService { GroupMemberAuditEvent.create(actor, updatedGroup, addedMembers, addedOn); auditListener.onAddMembers(event); } catch (RuntimeException e) { - log.error("failed to log add accounts to group event", e); + logger.atSevere().withCause(e).log("failed to log add accounts to group event"); } } } @@ -75,7 +74,7 @@ public class AuditService { GroupMemberAuditEvent.create(actor, updatedGroup, deletedMembers, deletedOn); auditListener.onDeleteMembers(event); } catch (RuntimeException e) { - log.error("failed to log delete accounts from group event", e); + logger.atSevere().withCause(e).log("failed to log delete accounts from group event"); } } } @@ -91,7 +90,7 @@ public class AuditService { GroupSubgroupAuditEvent.create(actor, updatedGroup, addedSubgroups, addedOn); auditListener.onAddSubgroups(event); } catch (RuntimeException e) { - log.error("failed to log add groups to group event", e); + logger.atSevere().withCause(e).log("failed to log add groups to group event"); } } } @@ -107,7 +106,7 @@ public class AuditService { GroupSubgroupAuditEvent.create(actor, updatedGroup, deletedSubgroups, deletedOn); auditListener.onDeleteSubgroups(event); } catch (RuntimeException e) { - log.error("failed to log delete groups from group event", e); + logger.atSevere().withCause(e).log("failed to log delete groups from group event"); } } } diff --git a/java/com/google/gerrit/server/auth/ldap/Helper.java b/java/com/google/gerrit/server/auth/ldap/Helper.java index fe573743d4..081d0a8476 100644 --- a/java/com/google/gerrit/server/auth/ldap/Helper.java +++ b/java/com/google/gerrit/server/auth/ldap/Helper.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.auth.ldap; import com.google.common.base.Throwables; import com.google.common.cache.Cache; import com.google.common.collect.ImmutableSet; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.ParameterizedString; import com.google.gerrit.reviewdb.client.AccountGroup; import com.google.gerrit.server.account.AccountException; @@ -57,12 +58,10 @@ import javax.security.auth.Subject; import javax.security.auth.login.LoginContext; import javax.security.auth.login.LoginException; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton class Helper { - private static final Logger log = LoggerFactory.getLogger(Helper.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); static final String LDAP_UUID = "ldap:"; static final String STARTTLS_PROPERTY = Helper.class.getName() + ".startTls"; @@ -155,12 +154,12 @@ class Helper { tls.close(); } } catch (IOException | NamingException e) { - log.warn("Cannot close LDAP startTls handle", e); + logger.atWarning().withCause(e).log("Cannot close LDAP startTls handle"); } try { ctx.close(); } catch (NamingException e) { - log.warn("Cannot close LDAP handle", e); + logger.atWarning().withCause(e).log("Cannot close LDAP handle"); } } @@ -198,7 +197,7 @@ class Helper { Throwables.throwIfInstanceOf(e.getException(), IOException.class); Throwables.throwIfInstanceOf(e.getException(), NamingException.class); Throwables.throwIfInstanceOf(e.getException(), RuntimeException.class); - log.warn("Internal error", e.getException()); + logger.atWarning().withCause(e.getException()).log("Internal error"); return null; } finally { ctx.logout(); @@ -345,7 +344,7 @@ class Helper { } } } catch (NamingException e) { - log.warn("Could not find group {}", groupDN, e); + logger.atWarning().withCause(e).log("Could not find group %s", groupDN); } cachedParentsDNs = dns.build(); parentGroups.put(groupDN, cachedParentsDNs); @@ -476,11 +475,13 @@ class Helper { try { return LdapType.guessType(ctx); } catch (NamingException e) { - log.warn( - "Cannot discover type of LDAP server at {}," - + " assuming the server is RFC 2307 compliant.", - server, - e); + logger + .atWarning() + .withCause(e) + .log( + "Cannot discover type of LDAP server at %s," + + " assuming the server is RFC 2307 compliant.", + server); return LdapType.RFC_2307; } } diff --git a/java/com/google/gerrit/server/auth/ldap/LdapAuthBackend.java b/java/com/google/gerrit/server/auth/ldap/LdapAuthBackend.java index 7f7152dd8a..f31954e6e1 100644 --- a/java/com/google/gerrit/server/auth/ldap/LdapAuthBackend.java +++ b/java/com/google/gerrit/server/auth/ldap/LdapAuthBackend.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.auth.ldap; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.client.AuthType; import com.google.gerrit.server.account.AccountException; import com.google.gerrit.server.auth.AuthBackend; @@ -33,12 +34,10 @@ import javax.naming.NamingException; import javax.naming.directory.DirContext; import javax.security.auth.login.LoginException; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Implementation of AuthBackend for the LDAP authentication system. */ public class LdapAuthBackend implements AuthBackend { - private static final Logger log = LoggerFactory.getLogger(LdapAuthBackend.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final Helper helper; private final AuthConfig authConfig; @@ -90,13 +89,13 @@ public class LdapAuthBackend implements AuthBackend { helper.close(ctx); } } catch (AccountException e) { - log.error("Cannot query LDAP to authenticate user", e); + logger.atSevere().withCause(e).log("Cannot query LDAP to authenticate user"); throw new InvalidCredentialsException("Cannot query LDAP for account", e); } catch (IOException | NamingException e) { - log.error("Cannot query LDAP to authenticate user", e); + logger.atSevere().withCause(e).log("Cannot query LDAP to authenticate user"); throw new AuthException("Cannot query LDAP for account", e); } catch (LoginException e) { - log.error("Cannot authenticate server via JAAS", e); + logger.atSevere().withCause(e).log("Cannot authenticate server via JAAS"); throw new AuthException("Cannot query LDAP for account", e); } } diff --git a/java/com/google/gerrit/server/auth/ldap/LdapGroupBackend.java b/java/com/google/gerrit/server/auth/ldap/LdapGroupBackend.java index bb3d6f8c8f..c338cd30bc 100644 --- a/java/com/google/gerrit/server/auth/ldap/LdapGroupBackend.java +++ b/java/com/google/gerrit/server/auth/ldap/LdapGroupBackend.java @@ -22,6 +22,7 @@ import static com.google.gerrit.server.auth.ldap.LdapModule.GROUP_EXIST_CACHE; import com.google.common.cache.LoadingCache; import com.google.common.collect.Sets; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.common.data.GroupDescription; import com.google.gerrit.common.data.GroupReference; @@ -51,12 +52,10 @@ import javax.naming.directory.DirContext; import javax.naming.ldap.LdapName; import javax.naming.ldap.Rdn; import javax.security.auth.login.LoginException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Implementation of GroupBackend for the LDAP group system. */ public class LdapGroupBackend implements GroupBackend { - static final Logger log = LoggerFactory.getLogger(LdapGroupBackend.class); + static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final String LDAP_NAME = "ldap/"; private static final String GROUPNAME = "groupname"; @@ -103,7 +102,7 @@ public class LdapGroupBackend implements GroupBackend { return cn; } } catch (InvalidNameException e) { - log.warn("Cannot parse LDAP dn for cn", e); + logger.atWarning().withCause(e).log("Cannot parse LDAP dn for cn"); } return dn; } @@ -127,7 +126,7 @@ public class LdapGroupBackend implements GroupBackend { return null; } } catch (ExecutionException e) { - log.warn("Cannot lookup group {} in LDAP", groupDn, e); + logger.atWarning().withCause(e).log("Cannot lookup group %s in LDAP", groupDn); return null; } } @@ -217,7 +216,7 @@ public class LdapGroupBackend implements GroupBackend { helper.close(ctx); } } catch (IOException | NamingException | LoginException e) { - log.warn("Cannot query LDAP for groups matching requested name", e); + logger.atWarning().withCause(e).log("Cannot query LDAP for groups matching requested name"); } return out; } diff --git a/java/com/google/gerrit/server/auth/ldap/LdapGroupMembership.java b/java/com/google/gerrit/server/auth/ldap/LdapGroupMembership.java index 39c8a2fdd4..7f0bd7b9e3 100644 --- a/java/com/google/gerrit/server/auth/ldap/LdapGroupMembership.java +++ b/java/com/google/gerrit/server/auth/ldap/LdapGroupMembership.java @@ -65,7 +65,10 @@ class LdapGroupMembership implements GroupMembership { try { membership = new ListGroupMembership(membershipCache.get(id)); } catch (ExecutionException e) { - LdapGroupBackend.log.warn("Cannot lookup membershipsOf {} in LDAP", id, e); + LdapGroupBackend.logger + .atWarning() + .withCause(e) + .log("Cannot lookup membershipsOf %s in LDAP", id); membership = GroupMembership.EMPTY; } } diff --git a/java/com/google/gerrit/server/auth/ldap/LdapRealm.java b/java/com/google/gerrit/server/auth/ldap/LdapRealm.java index 4aeac962a2..8d12d32ce2 100644 --- a/java/com/google/gerrit/server/auth/ldap/LdapRealm.java +++ b/java/com/google/gerrit/server/auth/ldap/LdapRealm.java @@ -19,6 +19,7 @@ import static com.google.gerrit.server.account.externalids.ExternalId.SCHEME_GER import com.google.common.base.Strings; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.GroupReference; import com.google.gerrit.common.data.ParameterizedString; import com.google.gerrit.extensions.client.AccountFieldName; @@ -56,12 +57,10 @@ import javax.naming.NamingException; import javax.naming.directory.DirContext; import javax.security.auth.login.LoginException; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton class LdapRealm extends AbstractRealm { - private static final Logger log = LoggerFactory.getLogger(LdapRealm.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); static final String LDAP = "com.sun.jndi.ldap.LdapCtxFactory"; static final String USERNAME = "username"; @@ -196,7 +195,7 @@ class LdapRealm extends AbstractRealm { String configOption, String suppliedValue, boolean disabledByBackend) { if (disabledByBackend && !Strings.isNullOrEmpty(suppliedValue)) { String msg = String.format("LDAP backend doesn't support: ldap.%s", configOption); - log.error(msg); + logger.atSevere().log(msg); throw new IllegalArgumentException(msg); } } @@ -290,10 +289,10 @@ class LdapRealm extends AbstractRealm { helper.close(ctx); } } catch (IOException | NamingException e) { - log.error("Cannot query LDAP to authenticate user", e); + logger.atSevere().withCause(e).log("Cannot query LDAP to authenticate user"); throw new AuthenticationUnavailableException("Cannot query LDAP for account", e); } catch (LoginException e) { - log.error("Cannot authenticate server via JAAS", e); + logger.atSevere().withCause(e).log("Cannot authenticate server via JAAS"); throw new AuthenticationUnavailableException("Cannot query LDAP for account", e); } } @@ -312,7 +311,7 @@ class LdapRealm extends AbstractRealm { Optional id = usernameCache.get(accountName); return id != null ? id.orElse(null) : null; } catch (ExecutionException e) { - log.warn("Cannot lookup account {} in LDAP", accountName, e); + logger.atWarning().withCause(e).log("Cannot lookup account %s in LDAP", accountName); return null; } } diff --git a/java/com/google/gerrit/server/cache/h2/BUILD b/java/com/google/gerrit/server/cache/h2/BUILD index f8d0105cb9..96eba1c9ed 100644 --- a/java/com/google/gerrit/server/cache/h2/BUILD +++ b/java/com/google/gerrit/server/cache/h2/BUILD @@ -9,8 +9,8 @@ java_library( "//java/com/google/gerrit/server", "//lib:guava", "//lib:h2", + "//lib/flogger:api", "//lib/guice", "//lib/jgit/org.eclipse.jgit:jgit", - "//lib/log:api", ], ) diff --git a/java/com/google/gerrit/server/cache/h2/H2CacheFactory.java b/java/com/google/gerrit/server/cache/h2/H2CacheFactory.java index 451540dfdc..a1cc1c2690 100644 --- a/java/com/google/gerrit/server/cache/h2/H2CacheFactory.java +++ b/java/com/google/gerrit/server/cache/h2/H2CacheFactory.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.cache.h2; import com.google.common.cache.Cache; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; +import com.google.common.flogger.FluentLogger; import com.google.common.util.concurrent.ThreadFactoryBuilder; import com.google.gerrit.extensions.events.LifecycleListener; import com.google.gerrit.extensions.registration.DynamicMap; @@ -42,12 +43,10 @@ import java.util.concurrent.Future; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton class H2CacheFactory implements PersistentCacheFactory, LifecycleListener { - private static final Logger log = LoggerFactory.getLogger(H2CacheFactory.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final MemoryCacheFactory memCacheFactory; private final Config config; @@ -99,15 +98,15 @@ class H2CacheFactory implements PersistentCacheFactory, LifecycleListener { try { Files.createDirectories(loc); } catch (IOException e) { - log.warn("Can't create disk cache: " + loc.toAbsolutePath()); + logger.atWarning().log("Can't create disk cache: %s", loc.toAbsolutePath()); return null; } } if (!Files.isWritable(loc)) { - log.warn("Can't write to disk cache: " + loc.toAbsolutePath()); + logger.atWarning().log("Can't write to disk cache: %s", loc.toAbsolutePath()); return null; } - log.info("Enabling disk cache " + loc.toAbsolutePath()); + logger.atInfo().log("Enabling disk cache %s", loc.toAbsolutePath()); return loc; } @@ -132,16 +131,16 @@ class H2CacheFactory implements PersistentCacheFactory, LifecycleListener { List pending = executor.shutdownNow(); if (executor.awaitTermination(15, TimeUnit.MINUTES)) { if (pending != null && !pending.isEmpty()) { - log.info(String.format("Finishing %d disk cache updates", pending.size())); + logger.atInfo().log("Finishing %d disk cache updates", pending.size()); for (Runnable update : pending) { update.run(); } } } else { - log.info("Timeout waiting for disk cache to close"); + logger.atInfo().log("Timeout waiting for disk cache to close"); } } catch (InterruptedException e) { - log.warn("Interrupted waiting for disk cache to shutdown"); + logger.atWarning().log("Interrupted waiting for disk cache to shutdown"); } } synchronized (caches) { diff --git a/java/com/google/gerrit/server/cache/h2/H2CacheImpl.java b/java/com/google/gerrit/server/cache/h2/H2CacheImpl.java index 7db1a350b9..a2af508058 100644 --- a/java/com/google/gerrit/server/cache/h2/H2CacheImpl.java +++ b/java/com/google/gerrit/server/cache/h2/H2CacheImpl.java @@ -21,6 +21,7 @@ import com.google.common.cache.CacheLoader; import com.google.common.cache.CacheStats; import com.google.common.cache.LoadingCache; import com.google.common.collect.ImmutableSet; +import com.google.common.flogger.FluentLogger; import com.google.common.hash.BloomFilter; import com.google.gerrit.common.TimeUtil; import com.google.gerrit.server.cache.CacheSerializer; @@ -46,8 +47,6 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicLong; import org.h2.jdbc.JdbcSQLException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Hybrid in-memory and database backed cache built on H2. @@ -71,7 +70,7 @@ import org.slf4j.LoggerFactory; * @see H2CacheFactory */ public class H2CacheImpl extends AbstractLoadingCache implements PersistentCache { - private static final Logger log = LoggerFactory.getLogger(H2CacheImpl.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final ImmutableSet OLD_CLASS_NAMES = ImmutableSet.of("com.google.gerrit.server.change.ChangeKind"); @@ -347,11 +346,12 @@ public class H2CacheImpl extends AbstractLoadingCache implements Per // most likely bumping serialVersionUID rather than using the new versioning in the // CacheBinding. That's ok; we'll continue to support both for now. // TODO(dborowitz): Remove this case when Java serialization is no longer used. - log.warn( - "Entries cached for " - + url - + " have an incompatible class and can't be deserialized. " - + "Cache is flushed."); + logger + .atWarning() + .log( + "Entries cached for %s have an incompatible class and can't be deserialized. " + + "Cache is flushed.", + url); invalidateAll(); } else { throw e; @@ -359,7 +359,7 @@ public class H2CacheImpl extends AbstractLoadingCache implements Per } return b; } catch (IOException | SQLException e) { - log.warn("Cannot build BloomFilter for " + url + ": " + e.getMessage()); + logger.atWarning().log("Cannot build BloomFilter for %s: %s", url, e.getMessage()); c = close(c); return null; } finally { @@ -404,7 +404,7 @@ public class H2CacheImpl extends AbstractLoadingCache implements Per } } catch (IOException | SQLException e) { if (!isOldClassNameError(e)) { - log.warn("Cannot read cache " + url + " for " + key, e); + logger.atWarning().withCause(e).log("Cannot read cache %s for %s", url, key); } c = close(c); return null; @@ -475,7 +475,7 @@ public class H2CacheImpl extends AbstractLoadingCache implements Per c.put.clearParameters(); } } catch (IOException | SQLException e) { - log.warn("Cannot put into cache " + url, e); + logger.atWarning().withCause(e).log("Cannot put into cache %s", url); c = close(c); } finally { release(c); @@ -488,7 +488,7 @@ public class H2CacheImpl extends AbstractLoadingCache implements Per c = acquire(); invalidate(c, key); } catch (IOException | SQLException e) { - log.warn("Cannot invalidate cache " + url, e); + logger.atWarning().withCause(e).log("Cannot invalidate cache %s", url); c = close(c); } finally { release(c); @@ -517,7 +517,7 @@ public class H2CacheImpl extends AbstractLoadingCache implements Per } bloomFilter = newBloomFilter(); } catch (SQLException e) { - log.warn("Cannot invalidate cache " + url, e); + logger.atWarning().withCause(e).log("Cannot invalidate cache %s", url); c = close(c); } finally { release(c); @@ -531,8 +531,11 @@ public class H2CacheImpl extends AbstractLoadingCache implements Per try (PreparedStatement ps = c.conn.prepareStatement("DELETE FROM data WHERE version!=?")) { ps.setInt(1, version); int oldEntries = ps.executeUpdate(); - log.info( - "Pruned {} entries not matching version {} from cache {}", oldEntries, version, url); + logger + .atInfo() + .log( + "Pruned %d entries not matching version %d from cache %s", + oldEntries, version, url); } try (Statement s = c.conn.createStatement()) { // Compute size without restricting to version (although obsolete data was just pruned @@ -560,7 +563,7 @@ public class H2CacheImpl extends AbstractLoadingCache implements Per } } } catch (IOException | SQLException e) { - log.warn("Cannot prune cache " + url, e); + logger.atWarning().withCause(e).log("Cannot prune cache %s", url); c = close(c); } finally { release(c); @@ -582,7 +585,7 @@ public class H2CacheImpl extends AbstractLoadingCache implements Per } } } catch (SQLException e) { - log.warn("Cannot get DiskStats for " + url, e); + logger.atWarning().withCause(e).log("Cannot get DiskStats for %s", url); c = close(c); } finally { release(c); @@ -653,7 +656,7 @@ public class H2CacheImpl extends AbstractLoadingCache implements Per try { conn.close(); } catch (SQLException e) { - log.warn("Cannot close connection to " + url, e); + logger.atWarning().withCause(e).log("Cannot close connection to %s", url); } finally { conn = null; } @@ -665,7 +668,7 @@ public class H2CacheImpl extends AbstractLoadingCache implements Per try { ps.close(); } catch (SQLException e) { - log.warn("Cannot close statement for " + url, e); + logger.atWarning().withCause(e).log("Cannot close statement for %s", url); } } return null; diff --git a/java/com/google/gerrit/server/change/AbandonOp.java b/java/com/google/gerrit/server/change/AbandonOp.java index 2543f76f1d..5affd5c75a 100644 --- a/java/com/google/gerrit/server/change/AbandonOp.java +++ b/java/com/google/gerrit/server/change/AbandonOp.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.change; import com.google.common.base.Strings; import com.google.common.collect.ListMultimap; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.extensions.api.changes.NotifyHandling; import com.google.gerrit.extensions.api.changes.RecipientType; @@ -38,11 +39,9 @@ import com.google.gerrit.server.update.Context; import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import com.google.inject.assistedinject.Assisted; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class AbandonOp implements BatchUpdateOp { - private static final Logger log = LoggerFactory.getLogger(AbandonOp.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final AbandonedSender.Factory abandonedSenderFactory; private final ChangeMessagesUtil cmUtil; @@ -133,7 +132,7 @@ public class AbandonOp implements BatchUpdateOp { cm.setAccountsToNotify(accountsToNotify); cm.send(); } catch (Exception e) { - log.error("Cannot email update for change " + change.getId(), e); + logger.atSevere().withCause(e).log("Cannot email update for change %s", change.getId()); } changeAbandoned.fire(change, patchSet, accountState, msgTxt, ctx.getWhen(), notifyHandling); } diff --git a/java/com/google/gerrit/server/change/AbandonUtil.java b/java/com/google/gerrit/server/change/AbandonUtil.java index a01ad9e05c..f8f526c4ee 100644 --- a/java/com/google/gerrit/server/change/AbandonUtil.java +++ b/java/com/google/gerrit/server/change/AbandonUtil.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.change; import com.google.common.collect.ImmutableListMultimap; import com.google.common.collect.ListMultimap; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.index.query.QueryParseException; import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.server.InternalUser; @@ -32,12 +33,10 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.concurrent.TimeUnit; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class AbandonUtil { - private static final Logger log = LoggerFactory.getLogger(AbandonUtil.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final ChangeCleanupConfig cfg; private final Provider queryProvider; @@ -93,12 +92,15 @@ public class AbandonUtil { msg.append(" ").append(change.getId().get()); } msg.append("."); - log.error(msg.toString(), e); + logger.atSevere().withCause(e).log(msg.toString()); } } - log.info("Auto-Abandoned {} of {} changes.", count, changesToAbandon.size()); + logger.atInfo().log("Auto-Abandoned %d of %d changes.", count, changesToAbandon.size()); } catch (QueryParseException | OrmException e) { - log.error("Failed to query inactive open changes for auto-abandoning.", e); + logger + .atSevere() + .withCause(e) + .log("Failed to query inactive open changes for auto-abandoning."); } } @@ -116,11 +118,12 @@ public class AbandonUtil { if (!changesToAbandon.isEmpty()) { validChanges.add(cd); } else { - log.debug( - "Change data with id \"{}\" does not satisfy the query \"{}\"" - + " any more, hence skipping it in clean up", - cd.getId(), - query); + logger + .atFine() + .log( + "Change data with id \"%s\" does not satisfy the query \"%s\"" + + " any more, hence skipping it in clean up", + cd.getId(), query); } } return validChanges; diff --git a/java/com/google/gerrit/server/change/ChangeCleanupRunner.java b/java/com/google/gerrit/server/change/ChangeCleanupRunner.java index a887760520..b24d3cee45 100644 --- a/java/com/google/gerrit/server/change/ChangeCleanupRunner.java +++ b/java/com/google/gerrit/server/change/ChangeCleanupRunner.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.change; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.events.LifecycleListener; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.lifecycle.LifecycleModule; @@ -25,12 +26,10 @@ import com.google.gerrit.server.util.ManualRequestContext; import com.google.gerrit.server.util.OneOffRequestContext; import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Runnable to enable scheduling change cleanups to run periodically */ public class ChangeCleanupRunner implements Runnable { - private static final Logger log = LoggerFactory.getLogger(ChangeCleanupRunner.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static class Module extends LifecycleModule { @Override @@ -76,7 +75,7 @@ public class ChangeCleanupRunner implements Runnable { @Override public void run() { - log.info("Running change cleanups."); + logger.atInfo().log("Running change cleanups."); try (ManualRequestContext ctx = oneOffRequestContext.open()) { // abandonInactiveOpenChanges skips failures instead of throwing, so retrying will never // actually happen. For the purposes of this class that is fine: they'll get tried again the @@ -87,7 +86,7 @@ public class ChangeCleanupRunner implements Runnable { return null; }); } catch (RestApiException | UpdateException | OrmException e) { - log.error("Failed to cleanup changes.", e); + logger.atSevere().withCause(e).log("Failed to cleanup changes."); } } diff --git a/java/com/google/gerrit/server/change/ChangeInserter.java b/java/com/google/gerrit/server/change/ChangeInserter.java index 34cbea38f9..800cbbcb67 100644 --- a/java/com/google/gerrit/server/change/ChangeInserter.java +++ b/java/com/google/gerrit/server/change/ChangeInserter.java @@ -23,6 +23,7 @@ import static java.util.stream.Collectors.toSet; import com.google.common.base.MoreObjects; import com.google.common.collect.ImmutableListMultimap; import com.google.common.collect.ListMultimap; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.FooterConstants; import com.google.gerrit.common.data.LabelType; import com.google.gerrit.common.data.LabelTypes; @@ -80,16 +81,14 @@ import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.transport.ReceiveCommand; import org.eclipse.jgit.util.ChangeIdUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class ChangeInserter implements InsertChangeOp { + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + public interface Factory { ChangeInserter create(Change.Id cid, ObjectId commitId, String refName); } - private static final Logger log = LoggerFactory.getLogger(ChangeInserter.class); - private final PermissionBackend permissionBackend; private final ProjectCache projectCache; private final PatchSetInfoFactory patchSetInfoFactory; @@ -468,11 +467,12 @@ public class ChangeInserter implements InsertChangeOp { .test(ChangePermission.READ) && projectState.statePermitsRead(); } catch (PermissionBackendException e) { - log.warn( - String.format( + logger + .atWarning() + .withCause(e) + .log( "Failed to check if account %d can see change %d", - accountId.get(), notes.getChangeId().get()), - e); + accountId.get(), notes.getChangeId().get()); return false; } }) @@ -497,7 +497,10 @@ public class ChangeInserter implements InsertChangeOp { cm.addExtraCC(extraCC); cm.send(); } catch (Exception e) { - log.error("Cannot send email for new change " + change.getId(), e); + logger + .atSevere() + .withCause(e) + .log("Cannot send email for new change %s", change.getId()); } } diff --git a/java/com/google/gerrit/server/change/ChangeJson.java b/java/com/google/gerrit/server/change/ChangeJson.java index 73a7634dc6..4912a60c74 100644 --- a/java/com/google/gerrit/server/change/ChangeJson.java +++ b/java/com/google/gerrit/server/change/ChangeJson.java @@ -57,6 +57,7 @@ import com.google.common.collect.MultimapBuilder; import com.google.common.collect.SetMultimap; import com.google.common.collect.Sets; import com.google.common.collect.Table; +import com.google.common.flogger.FluentLogger; import com.google.common.primitives.Ints; import com.google.gerrit.common.Nullable; import com.google.gerrit.common.data.LabelType; @@ -165,8 +166,6 @@ import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevWalk; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Produces {@link ChangeInfo} (which is serialized to JSON afterwards) from {@link ChangeData}. @@ -175,7 +174,7 @@ import org.slf4j.LoggerFactory; * ChangeData} objects from different sources. */ public class ChangeJson { - private static final Logger log = LoggerFactory.getLogger(ChangeJson.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static final SubmitRuleOptions SUBMIT_RULE_OPTIONS_LENIENT = ChangeField.SUBMIT_RULE_OPTIONS_LENIENT.toBuilder().build(); @@ -502,7 +501,10 @@ public class ChangeJson { ensureLoaded(Collections.singleton(cd)); return Optional.of(format(cd, Optional.empty(), false)); } catch (OrmException | RuntimeException e) { - log.warn("Omitting corrupt change " + cd.getId() + " from results", e); + logger + .atWarning() + .withCause(e) + .log("Omitting corrupt change %s from results", cd.getId()); return Optional.empty(); } }); @@ -517,7 +519,7 @@ public class ChangeJson { try { c.call().ifPresent(result::add); } catch (Exception e) { - log.warn("Omitting change due to exception", e); + logger.atWarning().withCause(e).log("Omitting change due to exception"); } } return result; @@ -542,7 +544,7 @@ public class ChangeJson { notes = cd.notes(); } catch (OrmException e) { String msg = "Error loading change"; - log.warn(msg + " " + cd.getId(), e); + logger.atWarning().withCause(e).log(msg + " %s", cd.getId()); ChangeInfo info = new ChangeInfo(); info._number = cd.getId().get(); ProblemInfo p = new ProblemInfo(); @@ -914,7 +916,7 @@ public class ChangeJson { tag = psa.getTag(); date = psa.getGranted(); if (psa.isPostSubmit()) { - log.warn("unexpected post-submit approval on open change: {}", psa); + logger.atWarning().log("unexpected post-submit approval on open change: %s", psa); } } else { // Either the user cannot vote on this label, or they were added as a @@ -1559,7 +1561,7 @@ public class ChangeJson { } ProjectState projectState = projectCache.checkedGet(cd.project()); if (projectState == null) { - log.error("project state for project " + cd.project() + " is null"); + logger.atSevere().log("project state for project %s is null", cd.project()); return false; } return projectState.statePermitsRead(); diff --git a/java/com/google/gerrit/server/change/ChangeKindCacheImpl.java b/java/com/google/gerrit/server/change/ChangeKindCacheImpl.java index f3ab847075..da0b9c1772 100644 --- a/java/com/google/gerrit/server/change/ChangeKindCacheImpl.java +++ b/java/com/google/gerrit/server/change/ChangeKindCacheImpl.java @@ -21,6 +21,7 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.cache.Cache; import com.google.common.cache.Weigher; import com.google.common.collect.FluentIterable; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.extensions.client.ChangeKind; import com.google.gerrit.reviewdb.client.Change; @@ -58,11 +59,9 @@ import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.merge.ThreeWayMerger; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevWalk; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class ChangeKindCacheImpl implements ChangeKindCache { - private static final Logger log = LoggerFactory.getLogger(ChangeKindCacheImpl.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final String ID_CACHE = "change_kind"; @@ -108,8 +107,10 @@ public class ChangeKindCacheImpl implements ChangeKindCache { Key key = Key.create(prior, next, useRecursiveMerge); return new Loader(key, repoManager, project, rw, repoConfig).call(); } catch (IOException e) { - log.warn( - "Cannot check trivial rebase of new patch set " + next.name() + " in " + project, e); + logger + .atWarning() + .withCause(e) + .log("Cannot check trivial rebase of new patch set %s in %s", next.name(), project); return ChangeKind.REWORK; } } @@ -345,7 +346,10 @@ public class ChangeKindCacheImpl implements ChangeKindCache { Key key = Key.create(prior, next, useRecursiveMerge); return cache.get(key, new Loader(key, repoManager, project, rw, repoConfig)); } catch (ExecutionException e) { - log.warn("Cannot check trivial rebase of new patch set " + next.name() + " in " + project, e); + logger + .atWarning() + .withCause(e) + .log("Cannot check trivial rebase of new patch set %s in %s", next.name(), project); return ChangeKind.REWORK; } } @@ -397,12 +401,12 @@ public class ChangeKindCacheImpl implements ChangeKindCache { } } catch (OrmException e) { // Do nothing; assume we have a complex change - log.warn( - "Unable to get change kind for patchSet " - + patch.getPatchSetId() - + "of change " - + change.getId(), - e); + logger + .atWarning() + .withCause(e) + .log( + "Unable to get change kind for patchSet %s of change %s", + patch.getPatchSetId(), change.getId()); } } return kind; @@ -427,12 +431,12 @@ public class ChangeKindCacheImpl implements ChangeKindCache { cache, rw, repo.getConfig(), changeDataFactory.create(db, change), patch); } catch (IOException e) { // Do nothing; assume we have a complex change - log.warn( - "Unable to get change kind for patchSet " - + patch.getPatchSetId() - + "of change " - + change.getChangeId(), - e); + logger + .atWarning() + .withCause(e) + .log( + "Unable to get change kind for patchSet %s of change %s", + patch.getPatchSetId(), change.getChangeId()); } } return kind; diff --git a/java/com/google/gerrit/server/change/ChangeResource.java b/java/com/google/gerrit/server/change/ChangeResource.java index 69193d3f8d..ef8b2f9000 100644 --- a/java/com/google/gerrit/server/change/ChangeResource.java +++ b/java/com/google/gerrit/server/change/ChangeResource.java @@ -18,6 +18,7 @@ import static java.nio.charset.StandardCharsets.UTF_8; import com.google.common.base.MoreObjects; import com.google.common.collect.ImmutableList; +import com.google.common.flogger.FluentLogger; import com.google.common.hash.Hasher; import com.google.common.hash.Hashing; import com.google.gerrit.extensions.restapi.RestResource; @@ -49,11 +50,9 @@ import java.util.HashSet; import java.util.Optional; import java.util.Set; import org.eclipse.jgit.lib.ObjectId; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class ChangeResource implements RestResource, HasETag { - private static final Logger log = LoggerFactory.getLogger(ChangeResource.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); /** * JSON format version number for ETag computations. @@ -196,7 +195,7 @@ public class ChangeResource implements RestResource, HasETag { try { projectStateTree = projectCache.checkedGet(getProject()).tree(); } catch (IOException e) { - log.error(String.format("could not load project %s while computing etag", getProject())); + logger.atSevere().log("could not load project %s while computing etag", getProject()); projectStateTree = ImmutableList.of(); } diff --git a/java/com/google/gerrit/server/change/ConsistencyChecker.java b/java/com/google/gerrit/server/change/ConsistencyChecker.java index c58cde7b0f..cb6e649e12 100644 --- a/java/com/google/gerrit/server/change/ConsistencyChecker.java +++ b/java/com/google/gerrit/server/change/ConsistencyChecker.java @@ -26,6 +26,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.google.common.collect.MultimapBuilder; import com.google.common.collect.SetMultimap; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.FooterConstants; import com.google.gerrit.common.Nullable; import com.google.gerrit.common.TimeUtil; @@ -80,8 +81,6 @@ import org.eclipse.jgit.lib.RefUpdate; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevWalk; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Checks changes for various kinds of inconsistency and corruption. @@ -89,7 +88,7 @@ import org.slf4j.LoggerFactory; *

A single instance may be reused for checking multiple changes, but not concurrently. */ public class ConsistencyChecker { - private static final Logger log = LoggerFactory.getLogger(ConsistencyChecker.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); @AutoValue public abstract static class Result { @@ -202,7 +201,7 @@ public class ConsistencyChecker { } private Result logAndReturnOneProblem(Exception e, ChangeNotes notes, String problem) { - log.warn("Error checking change " + notes.getChangeId(), e); + logger.atWarning().withCause(e).log("Error checking change %s", notes.getChangeId()); return Result.create(notes, ImmutableList.of(problem(problem))); } @@ -582,7 +581,7 @@ public class ConsistencyChecker { bu.addOp(notes.getChangeId(), new FixMergedOp(p)); bu.execute(); } catch (UpdateException | RestApiException e) { - log.warn("Error marking " + notes.getChangeId() + "as merged", e); + logger.atWarning().withCause(e).log("Error marking %s as merged", notes.getChangeId()); p.status = Status.FIX_FAILED; p.outcome = "Error updating status to merged"; } @@ -623,7 +622,7 @@ public class ConsistencyChecker { } } catch (IOException e) { String msg = "Error fixing patch set ref"; - log.warn(msg + ' ' + ps.getId().toRefName(), e); + logger.atWarning().withCause(e).log("%s %s", msg, ps.getId().toRefName()); p.status = Status.FIX_FAILED; p.outcome = msg; } @@ -645,7 +644,7 @@ public class ConsistencyChecker { } } catch (UpdateException | RestApiException e) { String msg = "Error deleting patch set"; - log.warn(msg + " of change " + ops.get(0).psId.getParentKey(), e); + logger.atWarning().withCause(e).log("%s of change %s", msg, ops.get(0).psId.getParentKey()); for (DeletePatchSetFromDbOp op : ops) { // Overwrite existing statuses that were set before the transaction was // rolled back. @@ -777,7 +776,10 @@ public class ConsistencyChecker { } private void warn(Throwable t) { - log.warn("Error in consistency check of change " + notes.getChangeId(), t); + logger + .atWarning() + .withCause(t) + .log("Error in consistency check of change %s", notes.getChangeId()); } private Result result() { diff --git a/java/com/google/gerrit/server/change/EmailReviewComments.java b/java/com/google/gerrit/server/change/EmailReviewComments.java index 6286a2f230..65bef70da4 100644 --- a/java/com/google/gerrit/server/change/EmailReviewComments.java +++ b/java/com/google/gerrit/server/change/EmailReviewComments.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.change; import static com.google.gerrit.server.CommentsUtil.COMMENT_ORDER; import com.google.common.collect.ListMultimap; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.extensions.api.changes.NotifyHandling; import com.google.gerrit.extensions.api.changes.RecipientType; @@ -43,11 +44,9 @@ import com.google.inject.assistedinject.Assisted; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class EmailReviewComments implements Runnable, RequestContext { - private static final Logger log = LoggerFactory.getLogger(EmailReviewComments.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public interface Factory { // TODO(dborowitz/wyatta): Rationalize these arguments so HTML and text templates are operating @@ -150,7 +149,7 @@ public class EmailReviewComments implements Runnable, RequestContext { cm.setAccountsToNotify(accountsToNotify); cm.send(); } catch (Exception e) { - log.error("Cannot email comments for " + patchSet.getId(), e); + logger.atSevere().withCause(e).log("Cannot email comments for %s", patchSet.getId()); } finally { requestContext.setContext(old); if (db != null) { diff --git a/java/com/google/gerrit/server/change/IncludedInResolver.java b/java/com/google/gerrit/server/change/IncludedInResolver.java index 658c91c818..820c90f48d 100644 --- a/java/com/google/gerrit/server/change/IncludedInResolver.java +++ b/java/com/google/gerrit/server/change/IncludedInResolver.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.change; import com.google.common.collect.LinkedListMultimap; import com.google.common.collect.ListMultimap; import com.google.common.collect.Lists; +import com.google.common.flogger.FluentLogger; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; @@ -34,13 +35,10 @@ import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevFlag; import org.eclipse.jgit.revwalk.RevWalk; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Resolve in which tags and branches a commit is included. */ public class IncludedInResolver { - - private static final Logger log = LoggerFactory.getLogger(IncludedInResolver.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static Result resolve(Repository repo, RevWalk rw, RevCommit commit) throws IOException { RevFlag flag = newFlag(rw); @@ -206,13 +204,11 @@ public class IncludedInResolver { } catch (MissingObjectException notHere) { // Log the problem with this branch, but keep processing. // - log.warn( - "Reference " - + ref.getName() - + " in " - + repo.getDirectory() - + " points to dangling object " - + ref.getObjectId()); + logger + .atWarning() + .log( + "Reference %s in %s points to dangling object %s", + ref.getName(), repo.getDirectory(), ref.getObjectId()); continue; } commitToRef.put(commit, ref.getName()); diff --git a/java/com/google/gerrit/server/change/MergeabilityCacheImpl.java b/java/com/google/gerrit/server/change/MergeabilityCacheImpl.java index b57be15d8d..6e6c2f5c66 100644 --- a/java/com/google/gerrit/server/change/MergeabilityCacheImpl.java +++ b/java/com/google/gerrit/server/change/MergeabilityCacheImpl.java @@ -22,6 +22,7 @@ import com.google.common.base.Enums; import com.google.common.base.MoreObjects; import com.google.common.cache.Cache; import com.google.common.cache.Weigher; +import com.google.common.flogger.FluentLogger; import com.google.common.util.concurrent.UncheckedExecutionException; import com.google.gerrit.extensions.client.SubmitType; import com.google.gerrit.reviewdb.client.Branch; @@ -46,12 +47,10 @@ import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class MergeabilityCacheImpl implements MergeabilityCache { - private static final Logger log = LoggerFactory.getLogger(MergeabilityCacheImpl.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final String CACHE_NAME = "mergeability"; @@ -213,11 +212,12 @@ public class MergeabilityCacheImpl implements MergeabilityCache { } }); } catch (ExecutionException | UncheckedExecutionException e) { - log.error( - String.format( + logger + .atSevere() + .withCause(e.getCause()) + .log( "Error checking mergeability of %s into %s (%s)", - key.commit.name(), key.into.name(), key.submitType.name()), - e.getCause()); + key.commit.name(), key.into.name(), key.submitType.name()); return false; } } diff --git a/java/com/google/gerrit/server/change/PatchSetInserter.java b/java/com/google/gerrit/server/change/PatchSetInserter.java index d05d1335d0..126b682f8d 100644 --- a/java/com/google/gerrit/server/change/PatchSetInserter.java +++ b/java/com/google/gerrit/server/change/PatchSetInserter.java @@ -22,6 +22,7 @@ import static com.google.gerrit.server.notedb.ReviewerStateInternal.REVIEWER; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableListMultimap; import com.google.common.collect.ListMultimap; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.api.changes.NotifyHandling; import com.google.gerrit.extensions.api.changes.RecipientType; import com.google.gerrit.extensions.restapi.AuthException; @@ -63,11 +64,9 @@ import java.util.Collections; import java.util.List; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.transport.ReceiveCommand; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class PatchSetInserter implements BatchUpdateOp { - private static final Logger log = LoggerFactory.getLogger(PatchSetInserter.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public interface Factory { PatchSetInserter create(ChangeNotes notes, PatchSet.Id psId, ObjectId commitId); @@ -301,7 +300,10 @@ public class PatchSetInserter implements BatchUpdateOp { cm.setAccountsToNotify(accountsToNotify); cm.send(); } catch (Exception err) { - log.error("Cannot send email for new patch set on change " + change.getId(), err); + logger + .atSevere() + .withCause(err) + .log("Cannot send email for new patch set on change %s", change.getId()); } } diff --git a/java/com/google/gerrit/server/change/RebaseUtil.java b/java/com/google/gerrit/server/change/RebaseUtil.java index bfb16924d0..bb35d4f3c8 100644 --- a/java/com/google/gerrit/server/change/RebaseUtil.java +++ b/java/com/google/gerrit/server/change/RebaseUtil.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.change; import com.google.auto.value.AutoValue; +import com.google.common.flogger.FluentLogger; import com.google.common.primitives.Ints; import com.google.gerrit.extensions.restapi.ResourceConflictException; import com.google.gerrit.extensions.restapi.RestApiException; @@ -38,12 +39,10 @@ import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevWalk; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Utility methods related to rebasing changes. */ public class RebaseUtil { - private static final Logger log = LoggerFactory.getLogger(RebaseUtil.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final Provider queryProvider; private final ChangeNotes.Factory notesFactory; @@ -69,10 +68,10 @@ public class RebaseUtil { } catch (RestApiException e) { return false; } catch (OrmException | IOException e) { - log.warn( - String.format( - "Error checking if patch set %s on %s can be rebased", patchSet.getId(), dest), - e); + logger + .atWarning() + .withCause(e) + .log("Error checking if patch set %s on %s can be rebased", patchSet.getId(), dest); return false; } } diff --git a/java/com/google/gerrit/server/change/SetAssigneeOp.java b/java/com/google/gerrit/server/change/SetAssigneeOp.java index 74ca54b30d..7be63b9c01 100644 --- a/java/com/google/gerrit/server/change/SetAssigneeOp.java +++ b/java/com/google/gerrit/server/change/SetAssigneeOp.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.change; import static com.google.common.base.Preconditions.checkNotNull; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.registration.DynamicSet; import com.google.gerrit.extensions.restapi.ResourceConflictException; import com.google.gerrit.extensions.restapi.RestApiException; @@ -35,11 +36,9 @@ import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.assistedinject.Assisted; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class SetAssigneeOp implements BatchUpdateOp { - private static final Logger log = LoggerFactory.getLogger(SetAssigneeOp.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public interface Factory { SetAssigneeOp create(IdentifiedUser assignee); @@ -127,7 +126,10 @@ public class SetAssigneeOp implements BatchUpdateOp { cm.setFrom(user.get().getAccountId()); cm.send(); } catch (Exception err) { - log.error("Cannot send email to new assignee of change " + change.getId(), err); + logger + .atSevere() + .withCause(err) + .log("Cannot send email to new assignee of change %s", change.getId()); } assigneeChanged.fire( change, ctx.getAccount(), oldAssignee != null ? oldAssignee.state() : null, ctx.getWhen()); diff --git a/java/com/google/gerrit/server/change/WalkSorter.java b/java/com/google/gerrit/server/change/WalkSorter.java index 509f7749a4..fe9af9f737 100644 --- a/java/com/google/gerrit/server/change/WalkSorter.java +++ b/java/com/google/gerrit/server/change/WalkSorter.java @@ -23,6 +23,7 @@ import com.google.common.collect.Iterables; import com.google.common.collect.ListMultimap; import com.google.common.collect.MultimapBuilder; import com.google.common.collect.Ordering; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.reviewdb.client.PatchSet; import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.server.git.GitRepositoryManager; @@ -46,8 +47,6 @@ import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevFlag; import org.eclipse.jgit.revwalk.RevWalk; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Helper to sort {@link ChangeData}s based on {@link RevWalk} ordering. @@ -63,7 +62,7 @@ import org.slf4j.LoggerFactory; * of the changes was updated. */ public class WalkSorter { - private static final Logger log = LoggerFactory.getLogger(WalkSorter.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final Ordering> PROJECT_LIST_SORTER = Ordering.natural() @@ -237,7 +236,10 @@ public class WalkSorter { RevCommit c = rw.parseCommit(id); byCommit.put(c, PatchSetData.create(cd, maxPs, c)); } catch (MissingObjectException | IncorrectObjectTypeException e) { - log.warn("missing commit " + id.name() + " for patch set " + maxPs.getId(), e); + logger + .atWarning() + .withCause(e) + .log("missing commit %s for patch set %s", id.name(), maxPs.getId()); } } return byCommit; diff --git a/java/com/google/gerrit/server/config/AdministrateServerGroupsProvider.java b/java/com/google/gerrit/server/config/AdministrateServerGroupsProvider.java index 29f288a4f2..d6e61c40f5 100644 --- a/java/com/google/gerrit/server/config/AdministrateServerGroupsProvider.java +++ b/java/com/google/gerrit/server/config/AdministrateServerGroupsProvider.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.config; import com.google.common.collect.ImmutableSet; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.GroupReference; import com.google.gerrit.common.data.PermissionRule; import com.google.gerrit.server.account.GroupBackend; @@ -25,11 +26,11 @@ import com.google.gerrit.server.util.ThreadLocalRequestContext; import com.google.inject.Inject; import com.google.inject.Provider; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Loads {@link AdministrateServerGroups} from {@code gerrit.config}. */ public class AdministrateServerGroupsProvider implements Provider> { + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + private final ImmutableSet groups; @Inject @@ -48,8 +49,7 @@ public class AdministrateServerGroupsProvider implements Provider { - private static final Logger log = LoggerFactory.getLogger(GerritServerConfigProvider.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final SitePaths site; private final SecureStore secureStore; @@ -78,7 +77,7 @@ public class GerritServerConfigProvider implements Provider { public GerritConfig loadConfig() { FileBasedConfig baseConfig = loadConfig(null, site.gerrit_config); if (!baseConfig.getFile().exists()) { - log.info("No " + site.gerrit_config.toAbsolutePath() + "; assuming defaults"); + logger.atInfo().log("No %s; assuming defaults", site.gerrit_config.toAbsolutePath()); } FileBasedConfig noteDbConfigOverBaseConfig = loadConfig(baseConfig, site.notedb_config); diff --git a/java/com/google/gerrit/server/config/GerritServerConfigReloader.java b/java/com/google/gerrit/server/config/GerritServerConfigReloader.java index 61adaddcb8..1890de86e7 100644 --- a/java/com/google/gerrit/server/config/GerritServerConfigReloader.java +++ b/java/com/google/gerrit/server/config/GerritServerConfigReloader.java @@ -14,18 +14,17 @@ package com.google.gerrit.server.config; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.registration.DynamicSet; import com.google.inject.Inject; import com.google.inject.Singleton; import java.util.ArrayList; import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Issues a configuration reload from the GerritServerConfigProvider and notify all listeners. */ @Singleton public class GerritServerConfigReloader { - private static final Logger log = LoggerFactory.getLogger(GerritServerConfigReloader.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final GerritServerConfigProvider configProvider; private final DynamicSet configListeners; @@ -42,9 +41,9 @@ public class GerritServerConfigReloader { * reload is fully completed before a new one starts. */ public List reloadConfig() { - log.info("Starting server configuration reload"); + logger.atInfo().log("Starting server configuration reload"); List updates = fireUpdatedConfigEvent(configProvider.updateConfig()); - log.info("Server configuration reload completed succesfully"); + logger.atInfo().log("Server configuration reload completed succesfully"); return updates; } diff --git a/java/com/google/gerrit/server/config/GitwebCgiConfig.java b/java/com/google/gerrit/server/config/GitwebCgiConfig.java index 153cddc1d8..d7fb83cedc 100644 --- a/java/com/google/gerrit/server/config/GitwebCgiConfig.java +++ b/java/com/google/gerrit/server/config/GitwebCgiConfig.java @@ -17,17 +17,16 @@ package com.google.gerrit.server.config; import static java.nio.file.Files.isExecutable; import static java.nio.file.Files.isRegularFile; +import com.google.common.flogger.FluentLogger; import com.google.inject.Inject; import com.google.inject.Singleton; import java.nio.file.Path; import java.nio.file.Paths; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class GitwebCgiConfig { - private static final Logger log = LoggerFactory.getLogger(GitwebCgiConfig.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public GitwebCgiConfig disabled() { return new GitwebCgiConfig(); @@ -84,11 +83,11 @@ public class GitwebCgiConfig { } else if (isRegularFile(pkgCgi) && isExecutable(pkgCgi)) { // Use the OS packaged CGI. // - log.debug("Assuming gitweb at " + pkgCgi); + logger.atFine().log("Assuming gitweb at %s", pkgCgi); cgi = pkgCgi; } else { - log.warn("gitweb not installed (no " + pkgCgi + " found)"); + logger.atWarning().log("gitweb not installed (no %s found)", pkgCgi); cgi = null; resourcePaths = new String[] {}; } diff --git a/java/com/google/gerrit/server/config/GitwebConfig.java b/java/com/google/gerrit/server/config/GitwebConfig.java index 6c0f7696b7..f38572d1fa 100644 --- a/java/com/google/gerrit/server/config/GitwebConfig.java +++ b/java/com/google/gerrit/server/config/GitwebConfig.java @@ -19,6 +19,7 @@ import static com.google.common.base.Strings.emptyToNull; import static com.google.common.base.Strings.isNullOrEmpty; import static com.google.common.base.Strings.nullToEmpty; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.common.data.GitwebType; import com.google.gerrit.common.data.ParameterizedString; @@ -36,11 +37,9 @@ import com.google.inject.AbstractModule; import com.google.inject.Inject; import com.google.inject.Singleton; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class GitwebConfig { - private static final Logger log = LoggerFactory.getLogger(GitwebConfig.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static boolean isDisabled(Config cfg) { return isEmptyString(cfg, "gitweb", null, "url") @@ -124,10 +123,10 @@ public class GitwebConfig { if (isValidPathSeparator(c)) { type.setPathSeparator(firstNonNull(c, defaultType.getPathSeparator())); } else { - log.warn("Invalid gitweb.pathSeparator: " + c); + logger.atWarning().log("Invalid gitweb.pathSeparator: %s", c); } } else { - log.warn("gitweb.pathSeparator is not a single character: " + pathSeparator); + logger.atWarning().log("gitweb.pathSeparator is not a single character: %s", pathSeparator); } } return type; diff --git a/java/com/google/gerrit/server/config/GroupSetProvider.java b/java/com/google/gerrit/server/config/GroupSetProvider.java index a8c16741bb..2255a67d16 100644 --- a/java/com/google/gerrit/server/config/GroupSetProvider.java +++ b/java/com/google/gerrit/server/config/GroupSetProvider.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.config; import com.google.common.collect.ImmutableSet; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.GroupReference; import com.google.gerrit.reviewdb.client.AccountGroup; import com.google.gerrit.server.account.GroupBackend; @@ -25,11 +26,10 @@ import com.google.gerrit.server.util.ThreadLocalRequestContext; import com.google.inject.Provider; import java.util.List; import java.util.Set; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Parses groups referenced in the {@code gerrit.config} file. */ public abstract class GroupSetProvider implements Provider> { + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); protected Set groupIds; @@ -46,8 +46,7 @@ public abstract class GroupSetProvider implements Provider pluginConfigEntries; @@ -350,9 +349,10 @@ public class ProjectConfigEntry { } } } catch (IOException | ConfigInvalidException e) { - log.error( - String.format("Failed to check if plugin config of project %s was updated.", p.get()), - e); + logger + .atSevere() + .withCause(e) + .log("Failed to check if plugin config of project %s was updated.", p.get()); } } diff --git a/java/com/google/gerrit/server/config/ScheduleConfig.java b/java/com/google/gerrit/server/config/ScheduleConfig.java index 9fff1013c5..4083184f6e 100644 --- a/java/com/google/gerrit/server/config/ScheduleConfig.java +++ b/java/com/google/gerrit/server/config/ScheduleConfig.java @@ -20,6 +20,7 @@ import static java.time.ZoneId.systemDefault; import com.google.auto.value.AutoValue; import com.google.auto.value.extension.memoized.Memoized; import com.google.common.annotations.VisibleForTesting; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import java.time.DayOfWeek; import java.time.Duration; @@ -32,8 +33,6 @@ import java.util.Locale; import java.util.Optional; import java.util.concurrent.TimeUnit; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * This class reads a schedule for running a periodic background job from a Git config. @@ -101,7 +100,7 @@ import org.slf4j.LoggerFactory; */ @AutoValue public abstract class ScheduleConfig { - private static final Logger log = LoggerFactory.getLogger(ScheduleConfig.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); @VisibleForTesting static final String KEY_INTERVAL = "interval"; @VisibleForTesting static final String KEY_STARTTIME = "startTime"; @@ -157,28 +156,30 @@ public abstract class ScheduleConfig { private boolean isInvalidOrMissing(long interval, long initialDelay) { String key = section() + (subsection() != null ? "." + subsection() : ""); if (interval == MISSING_CONFIG && initialDelay == MISSING_CONFIG) { - log.info("No schedule configuration for \"{}\".", key); + logger.atInfo().log("No schedule configuration for \"%s\".", key); return true; } if (interval == MISSING_CONFIG) { - log.error( - "Incomplete schedule configuration for \"{}\" is ignored. Missing value for \"{}\".", - key, - key + "." + keyInterval()); + logger + .atSevere() + .log( + "Incomplete schedule configuration for \"%s\" is ignored. Missing value for \"%s\".", + key, key + "." + keyInterval()); return true; } if (initialDelay == MISSING_CONFIG) { - log.error( - "Incomplete schedule configuration for \"{}\" is ignored. Missing value for \"{}\".", - key, - key + "." + keyStartTime()); + logger + .atSevere() + .log( + "Incomplete schedule configuration for \"%s\" is ignored. Missing value for \"%s\".", + key, key + "." + keyStartTime()); return true; } if (interval <= 0 || initialDelay < 0) { - log.error("Invalid schedule configuration for \"{}\" is ignored. ", key); + logger.atSevere().log("Invalid schedule configuration for \"%s\" is ignored. ", key); return true; } diff --git a/java/com/google/gerrit/server/config/TrackingFootersProvider.java b/java/com/google/gerrit/server/config/TrackingFootersProvider.java index 7b23fccb01..7017a80a9a 100644 --- a/java/com/google/gerrit/server/config/TrackingFootersProvider.java +++ b/java/com/google/gerrit/server/config/TrackingFootersProvider.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.config; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.reviewdb.client.TrackingId; import com.google.inject.Inject; import com.google.inject.Provider; @@ -26,18 +27,17 @@ import java.util.List; import java.util.Set; import java.util.regex.PatternSyntaxException; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Provides a list of all configured {@link TrackingFooter}s. */ @Singleton public class TrackingFootersProvider implements Provider { + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + private static String TRACKING_ID_TAG = "trackingid"; private static String FOOTER_TAG = "footer"; private static String SYSTEM_TAG = "system"; private static String REGEX_TAG = "match"; private final List trackingFooters = new ArrayList<>(); - private static final Logger log = LoggerFactory.getLogger(TrackingFootersProvider.class); @Inject TrackingFootersProvider(@GerritServerConfig Config cfg) { @@ -50,36 +50,32 @@ public class TrackingFootersProvider implements Provider { if (footers.isEmpty()) { configValid = false; - log.error( - "Missing " + TRACKING_ID_TAG + "." + name + "." + FOOTER_TAG + " in gerrit.config"); + logger + .atSevere() + .log("Missing %s.%s.%s in gerrit.config", TRACKING_ID_TAG, name, FOOTER_TAG); } String system = cfg.getString(TRACKING_ID_TAG, name, SYSTEM_TAG); if (system == null || system.isEmpty()) { configValid = false; - log.error( - "Missing " + TRACKING_ID_TAG + "." + name + "." + SYSTEM_TAG + " in gerrit.config"); + logger + .atSevere() + .log("Missing %s.%s.%s in gerrit.config", TRACKING_ID_TAG, name, SYSTEM_TAG); } else if (system.length() > TrackingId.TRACKING_SYSTEM_MAX_CHAR) { configValid = false; - log.error( - "String too long \"" - + system - + "\" in gerrit.config " - + TRACKING_ID_TAG - + "." - + name - + "." - + SYSTEM_TAG - + " (max " - + TrackingId.TRACKING_SYSTEM_MAX_CHAR - + " char)"); + logger + .atSevere() + .log( + "String too long \"%s\" in gerrit.config %s.%s.%s (max %d char)", + system, TRACKING_ID_TAG, name, SYSTEM_TAG, TrackingId.TRACKING_SYSTEM_MAX_CHAR); } String match = cfg.getString(TRACKING_ID_TAG, name, REGEX_TAG); if (match == null || match.isEmpty()) { configValid = false; - log.error( - "Missing " + TRACKING_ID_TAG + "." + name + "." + REGEX_TAG + " in gerrit.config"); + logger + .atSevere() + .log("Missing %s.%s.%s in gerrit.config", TRACKING_ID_TAG, name, REGEX_TAG); } if (configValid) { @@ -88,17 +84,11 @@ public class TrackingFootersProvider implements Provider { trackingFooters.add(new TrackingFooter(footer, match, system)); } } catch (PatternSyntaxException e) { - log.error( - "Invalid pattern \"" - + match - + "\" in gerrit.config " - + TRACKING_ID_TAG - + "." - + name - + "." - + REGEX_TAG - + ": " - + e.getMessage()); + logger + .atSevere() + .log( + "Invalid pattern \"%s\" in gerrit.config %s.%s.%s: %s", + match, TRACKING_ID_TAG, name, REGEX_TAG, e.getMessage()); } } } diff --git a/java/com/google/gerrit/server/documentation/MarkdownFormatter.java b/java/com/google/gerrit/server/documentation/MarkdownFormatter.java index 68d2a347df..a7f9a05b7b 100644 --- a/java/com/google/gerrit/server/documentation/MarkdownFormatter.java +++ b/java/com/google/gerrit/server/documentation/MarkdownFormatter.java @@ -20,6 +20,7 @@ import static org.pegdown.Extensions.HARDWRAPS; import static org.pegdown.Extensions.SUPPRESS_ALL_HTML; import com.google.common.base.Strings; +import com.google.common.flogger.FluentLogger; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; @@ -37,11 +38,9 @@ import org.pegdown.ast.HeaderNode; import org.pegdown.ast.Node; import org.pegdown.ast.RootNode; import org.pegdown.ast.TextNode; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class MarkdownFormatter { - private static final Logger log = LoggerFactory.getLogger(MarkdownFormatter.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final String defaultCss; @@ -51,7 +50,7 @@ public class MarkdownFormatter { try { src = readPegdownCss(file); } catch (IOException err) { - log.warn("Cannot load pegdown.css", err); + logger.atWarning().withCause(err).log("Cannot load pegdown.css"); src = ""; } defaultCss = file.get() ? null : src; @@ -64,7 +63,7 @@ public class MarkdownFormatter { try { return readPegdownCss(new AtomicBoolean()); } catch (IOException err) { - log.warn("Cannot load pegdown.css", err); + logger.atWarning().withCause(err).log("Cannot load pegdown.css"); return ""; } } diff --git a/java/com/google/gerrit/server/documentation/QueryDocumentationExecutor.java b/java/com/google/gerrit/server/documentation/QueryDocumentationExecutor.java index eef6d3509c..c606919d29 100644 --- a/java/com/google/gerrit/server/documentation/QueryDocumentationExecutor.java +++ b/java/com/google/gerrit/server/documentation/QueryDocumentationExecutor.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.documentation; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; +import com.google.common.flogger.FluentLogger; import com.google.inject.Inject; import com.google.inject.Singleton; import java.io.IOException; @@ -36,12 +37,10 @@ import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.Directory; import org.apache.lucene.store.IndexOutput; import org.apache.lucene.store.RAMDirectory; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class QueryDocumentationExecutor { - private static final Logger log = LoggerFactory.getLogger(QueryDocumentationExecutor.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static Map WEIGHTS = ImmutableMap.of( @@ -70,7 +69,7 @@ public class QueryDocumentationExecutor { searcher = new IndexSearcher(reader); parser = new SimpleQueryParser(new StandardAnalyzer(), WEIGHTS); } catch (IOException e) { - log.error("Cannot initialize documentation full text index", e); + logger.atSevere().withCause(e).log("Cannot initialize documentation full text index"); searcher = null; parser = null; } @@ -107,7 +106,7 @@ public class QueryDocumentationExecutor { byte[] buffer = new byte[4096]; InputStream index = getClass().getResourceAsStream(Constants.INDEX_ZIP); if (index == null) { - log.warn("No index available"); + logger.atWarning().log("No index available"); return null; } diff --git a/java/com/google/gerrit/server/edit/tree/ChangeFileContentModification.java b/java/com/google/gerrit/server/edit/tree/ChangeFileContentModification.java index 3d75e6a27d..a163b583e6 100644 --- a/java/com/google/gerrit/server/edit/tree/ChangeFileContentModification.java +++ b/java/com/google/gerrit/server/edit/tree/ChangeFileContentModification.java @@ -18,6 +18,7 @@ import static com.google.common.base.Preconditions.checkNotNull; import static org.eclipse.jgit.lib.Constants.OBJ_BLOB; import com.google.common.annotations.VisibleForTesting; +import com.google.common.flogger.FluentLogger; import com.google.common.io.ByteStreams; import com.google.gerrit.extensions.restapi.RawInput; import java.io.IOException; @@ -32,13 +33,10 @@ import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.ObjectInserter; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** A {@code TreeModification} which changes the content of a file. */ public class ChangeFileContentModification implements TreeModification { - - private static final Logger log = LoggerFactory.getLogger(ChangeFileContentModification.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final String filePath; private final RawInput newContent; @@ -97,9 +95,9 @@ public class ChangeFileContentModification implements TreeModification { } catch (IOException e) { String message = String.format("Could not change the content of %s", dirCacheEntry.getPathString()); - log.error(message, e); + logger.atSevere().withCause(e).log(message); } catch (InvalidObjectIdException e) { - log.error("Invalid object id in submodule link", e); + logger.atSevere().withCause(e).log("Invalid object id in submodule link"); } } diff --git a/java/com/google/gerrit/server/events/EventBroker.java b/java/com/google/gerrit/server/events/EventBroker.java index 62e8d12070..6af0f44f0a 100644 --- a/java/com/google/gerrit/server/events/EventBroker.java +++ b/java/com/google/gerrit/server/events/EventBroker.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.events; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.registration.DynamicItem; import com.google.gerrit.extensions.registration.DynamicSet; import com.google.gerrit.extensions.restapi.AuthException; @@ -37,13 +38,11 @@ import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.Singleton; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Distributes Events to listeners if they are allowed to see them */ @Singleton public class EventBroker implements EventDispatcher { - private static final Logger log = LoggerFactory.getLogger(EventBroker.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static class Module extends LifecycleModule { @Override @@ -203,7 +202,9 @@ public class EventBroker implements EventDispatcher { .getChange(); return isVisibleTo(change, user); } catch (NoSuchChangeException e) { - log.debug("Change {} cannot be found, falling back on ref visibility check", cid.id); + logger + .atFine() + .log("Change %s cannot be found, falling back on ref visibility check", cid.id); } } return isVisibleTo(refEvent.getBranchNameKey(), user); diff --git a/java/com/google/gerrit/server/events/EventFactory.java b/java/com/google/gerrit/server/events/EventFactory.java index bc9d19014e..e82ca7e507 100644 --- a/java/com/google/gerrit/server/events/EventFactory.java +++ b/java/com/google/gerrit/server/events/EventFactory.java @@ -19,6 +19,7 @@ import static java.util.Comparator.comparing; import com.google.common.collect.ListMultimap; import com.google.common.collect.Lists; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.common.data.LabelType; import com.google.gerrit.common.data.LabelTypes; @@ -80,12 +81,10 @@ import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.PersonIdent; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevWalk; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class EventFactory { - private static final Logger log = LoggerFactory.getLogger(EventFactory.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final AccountCache accountCache; private final Emails emails; @@ -135,7 +134,7 @@ public class EventFactory { try (ReviewDb db = schema.open()) { return asChangeAttribute(db, change); } catch (OrmException e) { - log.error("Cannot open database connection", e); + logger.atSevere().withCause(e).log("Cannot open database connection"); return new ChangeAttribute(); } } @@ -158,7 +157,10 @@ public class EventFactory { try { a.commitMessage = changeDataFactory.create(db, change).commitMessage(); } catch (Exception e) { - log.error("Error while getting full commit message for change {}", a.number, e); + logger + .atSevere() + .withCause(e) + .log("Error while getting full commit message for change %d", a.number); } a.url = getChangeUrl(change); a.owner = asAccountAttribute(change.getOwner()); @@ -450,9 +452,9 @@ public class EventFactory { patchSetAttribute.files.add(p); } } catch (PatchListObjectTooLargeException e) { - log.warn("Cannot get patch list: " + e.getMessage()); + logger.atWarning().log("Cannot get patch list: %s", e.getMessage()); } catch (PatchListNotAvailableException e) { - log.error("Cannot get patch list", e); + logger.atSevere().withCause(e).log("Cannot get patch list"); } } @@ -476,7 +478,7 @@ public class EventFactory { try (ReviewDb db = schema.open()) { return asPatchSetAttribute(db, revWalk, change, patchSet); } catch (OrmException e) { - log.error("Cannot open database connection", e); + logger.atSevere().withCause(e).log("Cannot open database connection"); return new PatchSetAttribute(); } } @@ -523,11 +525,11 @@ public class EventFactory { } p.kind = changeKindCache.getChangeKind(db, change, patchSet); } catch (IOException | OrmException e) { - log.error("Cannot load patch set data for {}", patchSet.getId(), e); + logger.atSevere().withCause(e).log("Cannot load patch set data for %s", patchSet.getId()); } catch (PatchListObjectTooLargeException e) { - log.warn(String.format("Cannot get size information for %s: %s", pId, e.getMessage())); + logger.atWarning().log("Cannot get size information for %s: %s", pId, e.getMessage()); } catch (PatchListNotAvailableException e) { - log.error("Cannot get size information for {}.", pId, e); + logger.atSevere().withCause(e).log("Cannot get size information for %s.", pId); } return p; } diff --git a/java/com/google/gerrit/server/events/StreamEventsApiListener.java b/java/com/google/gerrit/server/events/StreamEventsApiListener.java index a63e1f8213..9592238be7 100644 --- a/java/com/google/gerrit/server/events/StreamEventsApiListener.java +++ b/java/com/google/gerrit/server/events/StreamEventsApiListener.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.events; import com.google.common.base.Supplier; import com.google.common.base.Suppliers; import com.google.common.collect.Sets; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.LabelType; import com.google.gerrit.common.data.LabelTypes; import com.google.gerrit.extensions.common.AccountInfo; @@ -69,8 +70,6 @@ import java.util.Map.Entry; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevWalk; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class StreamEventsApiListener @@ -89,7 +88,7 @@ public class StreamEventsApiListener RevisionCreatedListener, TopicEditedListener, VoteDeletedListener { - private static final Logger log = LoggerFactory.getLogger(StreamEventsApiListener.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static class Module extends AbstractModule { @Override @@ -267,7 +266,7 @@ public class StreamEventsApiListener dispatcher.get().postEvent(change, event); } catch (OrmException | PermissionBackendException e) { - log.error("Failed to dispatch event", e); + logger.atSevere().withCause(e).log("Failed to dispatch event"); } } @@ -283,7 +282,7 @@ public class StreamEventsApiListener dispatcher.get().postEvent(change, event); } catch (OrmException | PermissionBackendException e) { - log.error("Failed to dispatch event", e); + logger.atSevere().withCause(e).log("Failed to dispatch event"); } } @@ -301,7 +300,7 @@ public class StreamEventsApiListener dispatcher.get().postEvent(change, event); } catch (OrmException | PermissionBackendException e) { - log.error("Failed to dispatch event", e); + logger.atSevere().withCause(e).log("Failed to dispatch event"); } } @@ -321,7 +320,7 @@ public class StreamEventsApiListener dispatcher.get().postEvent(change, event); } catch (OrmException | PermissionBackendException e) { - log.error("Failed to dispatch event", e); + logger.atSevere().withCause(e).log("Failed to dispatch event"); } } @@ -339,7 +338,7 @@ public class StreamEventsApiListener dispatcher.get().postEvent(change, event); } } catch (OrmException | PermissionBackendException e) { - log.error("Failed to dispatch event", e); + logger.atSevere().withCause(e).log("Failed to dispatch event"); } } @@ -366,7 +365,7 @@ public class StreamEventsApiListener dispatcher.get().postEvent(change, event); } catch (OrmException | PermissionBackendException e) { - log.error("Failed to dispatch event", e); + logger.atSevere().withCause(e).log("Failed to dispatch event"); } } @@ -391,7 +390,7 @@ public class StreamEventsApiListener try { dispatcher.get().postEvent(refName, event); } catch (PermissionBackendException e) { - log.error("error while posting event", e); + logger.atSevere().withCause(e).log("Failed to dispatch event"); } } @@ -411,7 +410,7 @@ public class StreamEventsApiListener dispatcher.get().postEvent(change, event); } catch (OrmException | PermissionBackendException e) { - log.error("Failed to dispatch event", e); + logger.atSevere().withCause(e).log("Failed to dispatch event"); } } @@ -429,7 +428,7 @@ public class StreamEventsApiListener dispatcher.get().postEvent(change, event); } catch (OrmException | PermissionBackendException e) { - log.error("Failed to dispatch event", e); + logger.atSevere().withCause(e).log("Failed to dispatch event"); } } @@ -447,7 +446,7 @@ public class StreamEventsApiListener dispatcher.get().postEvent(change, event); } catch (OrmException | PermissionBackendException e) { - log.error("Failed to dispatch event", e); + logger.atSevere().withCause(e).log("Failed to dispatch event"); } } @@ -465,7 +464,7 @@ public class StreamEventsApiListener dispatcher.get().postEvent(change, event); } catch (OrmException | PermissionBackendException e) { - log.error("Failed to dispatch event", e); + logger.atSevere().withCause(e).log("Failed to dispatch event"); } } @@ -480,7 +479,7 @@ public class StreamEventsApiListener dispatcher.get().postEvent(change, event); } catch (OrmException | PermissionBackendException e) { - log.error("Failed to dispatch event", e); + logger.atSevere().withCause(e).log("Failed to dispatch event"); } } @@ -495,7 +494,7 @@ public class StreamEventsApiListener dispatcher.get().postEvent(change, event); } catch (OrmException | PermissionBackendException e) { - log.error("Failed to dispatch event", e); + logger.atSevere().withCause(e).log("Failed to dispatch event"); } } @@ -515,7 +514,7 @@ public class StreamEventsApiListener dispatcher.get().postEvent(change, event); } catch (OrmException | PermissionBackendException e) { - log.error("Failed to dispatch event", e); + logger.atSevere().withCause(e).log("Failed to dispatch event"); } } } diff --git a/java/com/google/gerrit/server/extensions/events/AssigneeChanged.java b/java/com/google/gerrit/server/extensions/events/AssigneeChanged.java index 3aeaf436f6..7320fd3814 100644 --- a/java/com/google/gerrit/server/extensions/events/AssigneeChanged.java +++ b/java/com/google/gerrit/server/extensions/events/AssigneeChanged.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.extensions.events; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.api.changes.NotifyHandling; import com.google.gerrit.extensions.common.AccountInfo; import com.google.gerrit.extensions.common.ChangeInfo; @@ -25,12 +26,10 @@ import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import com.google.inject.Singleton; import java.sql.Timestamp; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class AssigneeChanged { - private static final Logger log = LoggerFactory.getLogger(AssigneeChanged.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final DynamicSet listeners; private final EventUtil util; @@ -61,7 +60,7 @@ public class AssigneeChanged { } } } catch (OrmException e) { - log.error("Couldn't fire event", e); + logger.atSevere().withCause(e).log("Couldn't fire event"); } } diff --git a/java/com/google/gerrit/server/extensions/events/ChangeAbandoned.java b/java/com/google/gerrit/server/extensions/events/ChangeAbandoned.java index d600240cf4..3a19e979d4 100644 --- a/java/com/google/gerrit/server/extensions/events/ChangeAbandoned.java +++ b/java/com/google/gerrit/server/extensions/events/ChangeAbandoned.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.extensions.events; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.api.changes.NotifyHandling; import com.google.gerrit.extensions.common.AccountInfo; import com.google.gerrit.extensions.common.ChangeInfo; @@ -32,12 +33,10 @@ import com.google.inject.Inject; import com.google.inject.Singleton; import java.io.IOException; import java.sql.Timestamp; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class ChangeAbandoned { - private static final Logger log = LoggerFactory.getLogger(ChangeAbandoned.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final DynamicSet listeners; private final EventUtil util; @@ -75,13 +74,13 @@ public class ChangeAbandoned { } } } catch (PatchListObjectTooLargeException e) { - log.warn("Couldn't fire event: " + e.getMessage()); + logger.atWarning().log("Couldn't fire event: %s", e.getMessage()); } catch (PatchListNotAvailableException | GpgException | IOException | OrmException | PermissionBackendException e) { - log.error("Couldn't fire event", e); + logger.atSevere().withCause(e).log("Couldn't fire event"); } } diff --git a/java/com/google/gerrit/server/extensions/events/ChangeMerged.java b/java/com/google/gerrit/server/extensions/events/ChangeMerged.java index 04dba5ccc0..5b882b8d98 100644 --- a/java/com/google/gerrit/server/extensions/events/ChangeMerged.java +++ b/java/com/google/gerrit/server/extensions/events/ChangeMerged.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.extensions.events; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.api.changes.NotifyHandling; import com.google.gerrit.extensions.common.AccountInfo; import com.google.gerrit.extensions.common.ChangeInfo; @@ -32,12 +33,10 @@ import com.google.inject.Inject; import com.google.inject.Singleton; import java.io.IOException; import java.sql.Timestamp; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class ChangeMerged { - private static final Logger log = LoggerFactory.getLogger(ChangeMerged.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final DynamicSet listeners; private final EventUtil util; @@ -69,13 +68,13 @@ public class ChangeMerged { } } } catch (PatchListObjectTooLargeException e) { - log.warn("Couldn't fire event: " + e.getMessage()); + logger.atWarning().log("Couldn't fire event: %s", e.getMessage()); } catch (PatchListNotAvailableException | GpgException | IOException | OrmException | PermissionBackendException e) { - log.error("Couldn't fire event", e); + logger.atSevere().withCause(e).log("Couldn't fire event"); } } diff --git a/java/com/google/gerrit/server/extensions/events/ChangeRestored.java b/java/com/google/gerrit/server/extensions/events/ChangeRestored.java index deee7e029a..d62b6c16c2 100644 --- a/java/com/google/gerrit/server/extensions/events/ChangeRestored.java +++ b/java/com/google/gerrit/server/extensions/events/ChangeRestored.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.extensions.events; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.api.changes.NotifyHandling; import com.google.gerrit.extensions.common.AccountInfo; import com.google.gerrit.extensions.common.ChangeInfo; @@ -32,12 +33,10 @@ import com.google.inject.Inject; import com.google.inject.Singleton; import java.io.IOException; import java.sql.Timestamp; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class ChangeRestored { - private static final Logger log = LoggerFactory.getLogger(ChangeRestored.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final DynamicSet listeners; private final EventUtil util; @@ -69,13 +68,13 @@ public class ChangeRestored { } } } catch (PatchListObjectTooLargeException e) { - log.warn("Couldn't fire event: " + e.getMessage()); + logger.atWarning().log("Couldn't fire event: %s", e.getMessage()); } catch (PatchListNotAvailableException | GpgException | IOException | OrmException | PermissionBackendException e) { - log.error("Couldn't fire event", e); + logger.atSevere().withCause(e).log("Couldn't fire event"); } } diff --git a/java/com/google/gerrit/server/extensions/events/ChangeReverted.java b/java/com/google/gerrit/server/extensions/events/ChangeReverted.java index 1e91ab3cc4..5f8f8c3995 100644 --- a/java/com/google/gerrit/server/extensions/events/ChangeReverted.java +++ b/java/com/google/gerrit/server/extensions/events/ChangeReverted.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.extensions.events; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.api.changes.NotifyHandling; import com.google.gerrit.extensions.common.ChangeInfo; import com.google.gerrit.extensions.events.ChangeRevertedListener; @@ -23,12 +24,10 @@ import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import com.google.inject.Singleton; import java.sql.Timestamp; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class ChangeReverted { - private static final Logger log = LoggerFactory.getLogger(ChangeReverted.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final DynamicSet listeners; private final EventUtil util; @@ -53,7 +52,7 @@ public class ChangeReverted { } } } catch (OrmException e) { - log.error("Couldn't fire event", e); + logger.atSevere().withCause(e).log("Couldn't fire event"); } } diff --git a/java/com/google/gerrit/server/extensions/events/CommentAdded.java b/java/com/google/gerrit/server/extensions/events/CommentAdded.java index ec35ea81f6..8ba9f82b6a 100644 --- a/java/com/google/gerrit/server/extensions/events/CommentAdded.java +++ b/java/com/google/gerrit/server/extensions/events/CommentAdded.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.extensions.events; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.api.changes.NotifyHandling; import com.google.gerrit.extensions.common.AccountInfo; import com.google.gerrit.extensions.common.ApprovalInfo; @@ -34,12 +35,10 @@ import com.google.inject.Singleton; import java.io.IOException; import java.sql.Timestamp; import java.util.Map; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class CommentAdded { - private static final Logger log = LoggerFactory.getLogger(CommentAdded.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final DynamicSet listeners; private final EventUtil util; @@ -79,13 +78,13 @@ public class CommentAdded { } } } catch (PatchListObjectTooLargeException e) { - log.warn("Couldn't fire event: " + e.getMessage()); + logger.atWarning().log("Couldn't fire event: %s", e.getMessage()); } catch (PatchListNotAvailableException | GpgException | IOException | OrmException | PermissionBackendException e) { - log.error("Couldn't fire event", e); + logger.atSevere().withCause(e).log("Couldn't fire event"); } } diff --git a/java/com/google/gerrit/server/extensions/events/EventUtil.java b/java/com/google/gerrit/server/extensions/events/EventUtil.java index 5bc4bb43f9..8861148162 100644 --- a/java/com/google/gerrit/server/extensions/events/EventUtil.java +++ b/java/com/google/gerrit/server/extensions/events/EventUtil.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.extensions.events; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.client.ListChangesOption; import com.google.gerrit.extensions.common.AccountInfo; import com.google.gerrit.extensions.common.ApprovalInfo; @@ -41,12 +42,10 @@ import java.sql.Timestamp; import java.util.EnumSet; import java.util.HashMap; import java.util.Map; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class EventUtil { - private static final Logger log = LoggerFactory.getLogger(EventUtil.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final ImmutableSet CHANGE_OPTIONS; @@ -121,26 +120,24 @@ public class EventUtil { } public void logEventListenerError(Object event, Object listener, Exception error) { - if (log.isDebugEnabled()) { - log.debug( - "Error in event listener {} for event {}", - listener.getClass().getName(), - event.getClass().getName(), - error); - } else { - log.warn( - "Error in event listener {} for event {}: {}", - listener.getClass().getName(), - event.getClass().getName(), - error.getMessage()); - } + logger + .atWarning() + .log( + "Error in event listener %s for event %s: %s", + listener.getClass().getName(), event.getClass().getName(), error.getMessage()); + logger + .atFine() + .withCause(error) + .log("Cause of error in event listener %s:", listener.getClass().getName()); } public static void logEventListenerError(Object listener, Exception error) { - if (log.isDebugEnabled()) { - log.debug("Error in event listener {}", listener.getClass().getName(), error); - } else { - log.warn("Error in event listener {}: {}", listener.getClass().getName(), error.getMessage()); - } + logger + .atWarning() + .log("Error in event listener %s: %s", listener.getClass().getName(), error.getMessage()); + logger + .atFine() + .withCause(error) + .log("Cause of error in event listener %s", listener.getClass().getName()); } } diff --git a/java/com/google/gerrit/server/extensions/events/HashtagsEdited.java b/java/com/google/gerrit/server/extensions/events/HashtagsEdited.java index 948ff2df54..9a0247a9d1 100644 --- a/java/com/google/gerrit/server/extensions/events/HashtagsEdited.java +++ b/java/com/google/gerrit/server/extensions/events/HashtagsEdited.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.extensions.events; import com.google.common.collect.ImmutableSortedSet; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.api.changes.NotifyHandling; import com.google.gerrit.extensions.common.AccountInfo; import com.google.gerrit.extensions.common.ChangeInfo; @@ -28,12 +29,10 @@ import com.google.inject.Singleton; import java.sql.Timestamp; import java.util.Collection; import java.util.Set; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class HashtagsEdited { - private static final Logger log = LoggerFactory.getLogger(HashtagsEdited.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final DynamicSet listeners; private final EventUtil util; @@ -66,7 +65,7 @@ public class HashtagsEdited { } } } catch (OrmException e) { - log.error("Couldn't fire event", e); + logger.atSevere().withCause(e).log("Couldn't fire event"); } } diff --git a/java/com/google/gerrit/server/extensions/events/PrivateStateChanged.java b/java/com/google/gerrit/server/extensions/events/PrivateStateChanged.java index b30d4731f8..acd275d7da 100644 --- a/java/com/google/gerrit/server/extensions/events/PrivateStateChanged.java +++ b/java/com/google/gerrit/server/extensions/events/PrivateStateChanged.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.extensions.events; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.api.changes.NotifyHandling; import com.google.gerrit.extensions.common.AccountInfo; import com.google.gerrit.extensions.common.ChangeInfo; @@ -25,12 +26,10 @@ import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import com.google.inject.Singleton; import java.sql.Timestamp; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class PrivateStateChanged { - private static final Logger log = LoggerFactory.getLogger(PrivateStateChanged.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final DynamicSet listeners; private final EventUtil util; @@ -55,7 +54,7 @@ public class PrivateStateChanged { } } } catch (OrmException e) { - log.error("Couldn't fire event", e); + logger.atSevere().withCause(e).log("Couldn't fire event"); } } diff --git a/java/com/google/gerrit/server/extensions/events/ReviewerAdded.java b/java/com/google/gerrit/server/extensions/events/ReviewerAdded.java index 433ae06692..e33715bdc0 100644 --- a/java/com/google/gerrit/server/extensions/events/ReviewerAdded.java +++ b/java/com/google/gerrit/server/extensions/events/ReviewerAdded.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.extensions.events; import com.google.common.collect.Lists; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.api.changes.NotifyHandling; import com.google.gerrit.extensions.common.AccountInfo; import com.google.gerrit.extensions.common.ChangeInfo; @@ -34,12 +35,10 @@ import com.google.inject.Singleton; import java.io.IOException; import java.sql.Timestamp; import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class ReviewerAdded { - private static final Logger log = LoggerFactory.getLogger(ReviewerAdded.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final DynamicSet listeners; private final EventUtil util; @@ -76,13 +75,13 @@ public class ReviewerAdded { } } } catch (PatchListObjectTooLargeException e) { - log.warn("Couldn't fire event: " + e.getMessage()); + logger.atWarning().log("Couldn't fire event: %s", e.getMessage()); } catch (PatchListNotAvailableException | GpgException | IOException | OrmException | PermissionBackendException e) { - log.error("Couldn't fire event", e); + logger.atSevere().withCause(e).log("Couldn't fire event"); } } diff --git a/java/com/google/gerrit/server/extensions/events/ReviewerDeleted.java b/java/com/google/gerrit/server/extensions/events/ReviewerDeleted.java index 0037783604..011a3e83dd 100644 --- a/java/com/google/gerrit/server/extensions/events/ReviewerDeleted.java +++ b/java/com/google/gerrit/server/extensions/events/ReviewerDeleted.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.extensions.events; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.api.changes.NotifyHandling; import com.google.gerrit.extensions.common.AccountInfo; import com.google.gerrit.extensions.common.ApprovalInfo; @@ -34,12 +35,10 @@ import com.google.inject.Singleton; import java.io.IOException; import java.sql.Timestamp; import java.util.Map; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class ReviewerDeleted { - private static final Logger log = LoggerFactory.getLogger(ReviewerDeleted.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final DynamicSet listeners; private final EventUtil util; @@ -83,13 +82,13 @@ public class ReviewerDeleted { } } } catch (PatchListObjectTooLargeException e) { - log.warn("Couldn't fire event: " + e.getMessage()); + logger.atWarning().log("Couldn't fire event: %s", e.getMessage()); } catch (PatchListNotAvailableException | GpgException | IOException | OrmException | PermissionBackendException e) { - log.error("Couldn't fire event", e); + logger.atSevere().withCause(e).log("Couldn't fire event"); } } diff --git a/java/com/google/gerrit/server/extensions/events/RevisionCreated.java b/java/com/google/gerrit/server/extensions/events/RevisionCreated.java index e4fa647d1d..f203f5d412 100644 --- a/java/com/google/gerrit/server/extensions/events/RevisionCreated.java +++ b/java/com/google/gerrit/server/extensions/events/RevisionCreated.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.extensions.events; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.api.changes.NotifyHandling; import com.google.gerrit.extensions.common.AccountInfo; import com.google.gerrit.extensions.common.ChangeInfo; @@ -32,12 +33,10 @@ import com.google.inject.Inject; import com.google.inject.Singleton; import java.io.IOException; import java.sql.Timestamp; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class RevisionCreated { - private static final Logger log = LoggerFactory.getLogger(RevisionCreated.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static final RevisionCreated DISABLED = new RevisionCreated() { @@ -89,13 +88,13 @@ public class RevisionCreated { } } } catch (PatchListObjectTooLargeException e) { - log.warn("Couldn't fire event: " + e.getMessage()); + logger.atWarning().log("Couldn't fire event: %s", e.getMessage()); } catch (PatchListNotAvailableException | GpgException | IOException | OrmException | PermissionBackendException e) { - log.error("Couldn't fire event", e); + logger.atSevere().withCause(e).log("Couldn't fire event"); } } diff --git a/java/com/google/gerrit/server/extensions/events/TopicEdited.java b/java/com/google/gerrit/server/extensions/events/TopicEdited.java index 354137a801..45962f9bfd 100644 --- a/java/com/google/gerrit/server/extensions/events/TopicEdited.java +++ b/java/com/google/gerrit/server/extensions/events/TopicEdited.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.extensions.events; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.api.changes.NotifyHandling; import com.google.gerrit.extensions.common.AccountInfo; import com.google.gerrit.extensions.common.ChangeInfo; @@ -25,12 +26,10 @@ import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import com.google.inject.Singleton; import java.sql.Timestamp; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class TopicEdited { - private static final Logger log = LoggerFactory.getLogger(TopicEdited.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final DynamicSet listeners; private final EventUtil util; @@ -56,7 +55,7 @@ public class TopicEdited { } } } catch (OrmException e) { - log.error("Couldn't fire event", e); + logger.atSevere().withCause(e).log("Couldn't fire event"); } } diff --git a/java/com/google/gerrit/server/extensions/events/VoteDeleted.java b/java/com/google/gerrit/server/extensions/events/VoteDeleted.java index bd48c325ff..5480dd84fb 100644 --- a/java/com/google/gerrit/server/extensions/events/VoteDeleted.java +++ b/java/com/google/gerrit/server/extensions/events/VoteDeleted.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.extensions.events; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.api.changes.NotifyHandling; import com.google.gerrit.extensions.common.AccountInfo; import com.google.gerrit.extensions.common.ApprovalInfo; @@ -34,12 +35,10 @@ import com.google.inject.Singleton; import java.io.IOException; import java.sql.Timestamp; import java.util.Map; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class VoteDeleted { - private static final Logger log = LoggerFactory.getLogger(VoteDeleted.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final DynamicSet listeners; private final EventUtil util; @@ -83,13 +82,13 @@ public class VoteDeleted { } } } catch (PatchListObjectTooLargeException e) { - log.warn("Couldn't fire event: " + e.getMessage()); + logger.atWarning().log("Couldn't fire event: %s", e.getMessage()); } catch (PatchListNotAvailableException | GpgException | IOException | OrmException | PermissionBackendException e) { - log.error("Couldn't fire event", e); + logger.atSevere().withCause(e).log("Couldn't fire event"); } } diff --git a/java/com/google/gerrit/server/extensions/events/WorkInProgressStateChanged.java b/java/com/google/gerrit/server/extensions/events/WorkInProgressStateChanged.java index 62312d84c6..3f9f35bc93 100644 --- a/java/com/google/gerrit/server/extensions/events/WorkInProgressStateChanged.java +++ b/java/com/google/gerrit/server/extensions/events/WorkInProgressStateChanged.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.extensions.events; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.api.changes.NotifyHandling; import com.google.gerrit.extensions.common.AccountInfo; import com.google.gerrit.extensions.common.ChangeInfo; @@ -25,12 +26,10 @@ import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import com.google.inject.Singleton; import java.sql.Timestamp; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class WorkInProgressStateChanged { - private static final Logger log = LoggerFactory.getLogger(WorkInProgressStateChanged.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final DynamicSet listeners; private final EventUtil util; @@ -56,7 +55,7 @@ public class WorkInProgressStateChanged { } } } catch (OrmException e) { - log.error("Couldn't fire event", e); + logger.atSevere().withCause(e).log("Couldn't fire event"); } } diff --git a/java/com/google/gerrit/server/extensions/webui/UiActions.java b/java/com/google/gerrit/server/extensions/webui/UiActions.java index 26a795730a..0582e2de5f 100644 --- a/java/com/google/gerrit/server/extensions/webui/UiActions.java +++ b/java/com/google/gerrit/server/extensions/webui/UiActions.java @@ -21,6 +21,7 @@ import static java.util.stream.Collectors.toList; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Predicate; import com.google.common.collect.Streams; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.extensions.api.access.GlobalOrPluginPermission; import com.google.gerrit.extensions.conditions.BooleanCondition; @@ -47,12 +48,10 @@ import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class UiActions { - private static final Logger log = LoggerFactory.getLogger(UiActions.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static Predicate enabled() { return UiAction.Description::isEnabled; @@ -131,8 +130,10 @@ public class UiActions { try { view = e.getProvider().get(); } catch (RuntimeException err) { - log.error( - String.format("error creating view %s.%s", e.getPluginName(), e.getExportName()), err); + logger + .atSevere() + .withCause(err) + .log("error creating view %s.%s", e.getPluginName(), e.getExportName()); return null; } @@ -154,8 +155,10 @@ public class UiActions { try { globalRequired = GlobalPermission.fromAnnotation(e.getPluginName(), view.getClass()); } catch (PermissionBackendException err) { - log.error( - String.format("exception testing view %s.%s", e.getPluginName(), e.getExportName()), err); + logger + .atSevere() + .withCause(err) + .log("exception testing view %s.%s", e.getPluginName(), e.getExportName()); return null; } if (!globalRequired.isEmpty()) { diff --git a/java/com/google/gerrit/server/git/GarbageCollection.java b/java/com/google/gerrit/server/git/GarbageCollection.java index 997907e2a1..3624695284 100644 --- a/java/com/google/gerrit/server/git/GarbageCollection.java +++ b/java/com/google/gerrit/server/git/GarbageCollection.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.git; import com.google.common.collect.Sets; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.GarbageCollectionResult; import com.google.gerrit.extensions.events.GarbageCollectorListener; import com.google.gerrit.extensions.registration.DynamicSet; @@ -35,11 +36,9 @@ import org.eclipse.jgit.lib.NullProgressMonitor; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.lib.TextProgressMonitor; import org.eclipse.jgit.storage.pack.PackConfig; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class GarbageCollection { - private static final Logger log = LoggerFactory.getLogger(GarbageCollection.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final GitRepositoryManager repoManager; private final GarbageCollectionQueue gcQueue; @@ -118,7 +117,7 @@ public class GarbageCollection { try { l.onGarbageCollected(event); } catch (RuntimeException e) { - log.warn("Failure in GarbageCollectorListener", e); + logger.atWarning().withCause(e).log("Failure in GarbageCollectorListener"); } } } @@ -139,7 +138,7 @@ public class GarbageCollection { } b.append(s); } - log.info(b.toString()); + logger.atInfo().log(b.toString()); } private static void logGcConfiguration( @@ -179,7 +178,7 @@ public class GarbageCollection { print(writer, "failed.\n\n"); StringBuilder b = new StringBuilder(); b.append("[").append(projectName.get()).append("]"); - log.error(b.toString(), e); + logger.atSevere().withCause(e).log(b.toString()); } private static void print(PrintWriter writer, String message) { diff --git a/java/com/google/gerrit/server/git/GarbageCollectionLogFile.java b/java/com/google/gerrit/server/git/GarbageCollectionLogFile.java index 8796fdf839..b711708512 100644 --- a/java/com/google/gerrit/server/git/GarbageCollectionLogFile.java +++ b/java/com/google/gerrit/server/git/GarbageCollectionLogFile.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.git; +import com.google.common.flogger.backend.Platform; import com.google.gerrit.extensions.events.LifecycleListener; import com.google.gerrit.server.config.GerritServerConfig; import com.google.gerrit.server.config.SitePaths; @@ -40,13 +41,17 @@ public class GarbageCollectionLogFile implements LifecycleListener { @Override public void stop() { - LogManager.getLogger(GarbageCollection.class).removeAllAppenders(); - LogManager.getLogger(GarbageCollectionRunner.class).removeAllAppenders(); + getLogger(GarbageCollection.class).removeAllAppenders(); + getLogger(GarbageCollectionRunner.class).removeAllAppenders(); } private static void initLogSystem(Path logdir, boolean rotate) { - initGcLogger(logdir, rotate, LogManager.getLogger(GarbageCollection.class)); - initGcLogger(logdir, rotate, LogManager.getLogger(GarbageCollectionRunner.class)); + initGcLogger(logdir, rotate, getLogger(GarbageCollection.class)); + initGcLogger(logdir, rotate, getLogger(GarbageCollectionRunner.class)); + } + + private static Logger getLogger(Class clazz) { + return LogManager.getLogger(Platform.getBackend(clazz.getName()).getLoggerName()); } private static void initGcLogger(Path logdir, boolean rotate, Logger gcLogger) { diff --git a/java/com/google/gerrit/server/git/GarbageCollectionRunner.java b/java/com/google/gerrit/server/git/GarbageCollectionRunner.java index 054e56afd6..b44251d8cf 100644 --- a/java/com/google/gerrit/server/git/GarbageCollectionRunner.java +++ b/java/com/google/gerrit/server/git/GarbageCollectionRunner.java @@ -15,16 +15,15 @@ package com.google.gerrit.server.git; import com.google.common.collect.Lists; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.events.LifecycleListener; import com.google.gerrit.server.config.GcConfig; import com.google.gerrit.server.project.ProjectCache; import com.google.inject.Inject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Runnable to enable scheduling gc to run periodically */ public class GarbageCollectionRunner implements Runnable { - private static final Logger log = LoggerFactory.getLogger(GarbageCollectionRunner.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); static class Lifecycle implements LifecycleListener { private final WorkQueue queue; @@ -61,7 +60,7 @@ public class GarbageCollectionRunner implements Runnable { @Override public void run() { - log.info("Triggering gc on all repositories"); + logger.atInfo().log("Triggering gc on all repositories"); garbageCollectionFactory.create().run(Lists.newArrayList(projectCache.all())); } diff --git a/java/com/google/gerrit/server/git/GroupCollector.java b/java/com/google/gerrit/server/git/GroupCollector.java index 4a7c7e93cb..bb65fa8c95 100644 --- a/java/com/google/gerrit/server/git/GroupCollector.java +++ b/java/com/google/gerrit/server/git/GroupCollector.java @@ -27,6 +27,7 @@ import com.google.common.collect.Multimaps; import com.google.common.collect.SetMultimap; import com.google.common.collect.Sets; import com.google.common.collect.SortedSetMultimap; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.reviewdb.client.PatchSet; import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.reviewdb.server.ReviewDb; @@ -44,8 +45,6 @@ import java.util.TreeSet; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.revwalk.RevCommit; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Helper for assigning groups to commits during {@code ReceiveCommits}. @@ -75,7 +74,7 @@ import org.slf4j.LoggerFactory; * visited, call {@link #getGroups()} for the result. */ public class GroupCollector { - private static final Logger log = LoggerFactory.getLogger(GroupCollector.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static List getDefaultGroups(PatchSet ps) { return ImmutableList.of(ps.getRevision().get()); @@ -281,7 +280,7 @@ public class GroupCollector { return ObjectId.fromString(group); } catch (IllegalArgumentException e) { // Shouldn't happen; some sort of corruption or manual tinkering? - log.warn("group for commit {} is not a SHA-1: {}", forCommit.name(), group); + logger.atWarning().log("group for commit %s is not a SHA-1: %s", forCommit.name(), group); return null; } } diff --git a/java/com/google/gerrit/server/git/LocalDiskRepositoryManager.java b/java/com/google/gerrit/server/git/LocalDiskRepositoryManager.java index 2c035d387b..549c2844d5 100644 --- a/java/com/google/gerrit/server/git/LocalDiskRepositoryManager.java +++ b/java/com/google/gerrit/server/git/LocalDiskRepositoryManager.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.git; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.events.LifecycleListener; import com.google.gerrit.lifecycle.LifecycleModule; import com.google.gerrit.reviewdb.client.Project; @@ -45,13 +46,11 @@ import org.eclipse.jgit.lib.RepositoryCacheConfig; import org.eclipse.jgit.lib.StoredConfig; import org.eclipse.jgit.storage.file.WindowCacheConfig; import org.eclipse.jgit.util.FS; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Manages Git repositories stored on the local filesystem. */ @Singleton public class LocalDiskRepositoryManager implements GitRepositoryManager { - private static final Logger log = LoggerFactory.getLogger(LocalDiskRepositoryManager.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static class Module extends LifecycleModule { @Override @@ -98,7 +97,7 @@ public class LocalDiskRepositoryManager implements GitRepositoryManager { } else { desc = String.format("%d", limit); } - log.info("Defaulting core.streamFileThreshold to {}", desc); + logger.atInfo().log("Defaulting core.streamFileThreshold to %s", desc); cfg.setStreamFileThreshold(limit); } cfg.install(); @@ -193,7 +192,9 @@ public class LocalDiskRepositoryManager implements GitRepositoryManager { // File metaConfigLog = new File(db.getDirectory(), "logs/" + RefNames.REFS_CONFIG); if (!metaConfigLog.getParentFile().mkdirs() || !metaConfigLog.createNewFile()) { - log.error("Failed to create ref log for {} in repository {}", RefNames.REFS_CONFIG, name); + logger + .atSevere() + .log("Failed to create ref log for %s in repository %s", RefNames.REFS_CONFIG, name); } return db; @@ -246,7 +247,10 @@ public class LocalDiskRepositoryManager implements GitRepositoryManager { Integer.MAX_VALUE, visitor); } catch (IOException e) { - log.error("Error walking repository tree {}", visitor.startFolder.toAbsolutePath(), e); + logger + .atSevere() + .withCause(e) + .log("Error walking repository tree %s", visitor.startFolder.toAbsolutePath()); } } @@ -286,7 +290,7 @@ public class LocalDiskRepositoryManager implements GitRepositoryManager { @Override public FileVisitResult visitFileFailed(Path file, IOException e) { - log.warn(e.getMessage()); + logger.atWarning().log(e.getMessage()); return FileVisitResult.CONTINUE; } @@ -301,7 +305,7 @@ public class LocalDiskRepositoryManager implements GitRepositoryManager { Project.NameKey nameKey = getProjectName(startFolder, p); if (getBasePath(nameKey).equals(startFolder)) { if (isUnreasonableName(nameKey)) { - log.warn("Ignoring unreasonably named repository {}", p.toAbsolutePath()); + logger.atWarning().log("Ignoring unreasonably named repository %s", p.toAbsolutePath()); } else { found.add(nameKey); } diff --git a/java/com/google/gerrit/server/git/MergeUtil.java b/java/com/google/gerrit/server/git/MergeUtil.java index e2bec34e0a..637be24970 100644 --- a/java/com/google/gerrit/server/git/MergeUtil.java +++ b/java/com/google/gerrit/server/git/MergeUtil.java @@ -23,6 +23,7 @@ import com.google.common.collect.FluentIterable; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.google.common.collect.Sets; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.FooterConstants; import com.google.gerrit.common.Nullable; import com.google.gerrit.common.data.LabelType; @@ -92,8 +93,6 @@ import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevFlag; import org.eclipse.jgit.revwalk.RevSort; import org.eclipse.jgit.revwalk.RevWalk; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Utility methods used during the merge process. @@ -104,7 +103,7 @@ import org.slf4j.LoggerFactory; * {@code BatchUpdate}. */ public class MergeUtil { - private static final Logger log = LoggerFactory.getLogger(MergeUtil.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); static class PluggableCommitMessageGenerator { private final DynamicSet changeMessageModifiers; @@ -466,7 +465,7 @@ public class MergeUtil { try { return approvalsUtil.byPatchSet(db.get(), notes, user, psId, null, null); } catch (OrmException e) { - log.error("Can't read approval records for " + psId, e); + logger.atSevere().withCause(e).log("Can't read approval records for %s", psId); return Collections.emptyList(); } } @@ -499,7 +498,7 @@ public class MergeUtil { try (ObjectInserter ins = new InMemoryInserter(repo)) { return newThreeWayMerger(ins, repo.getConfig()).merge(new AnyObjectId[] {mergeTip, toMerge}); } catch (LargeObjectException e) { - log.warn("Cannot merge due to LargeObjectException: " + toMerge.name()); + logger.atWarning().log("Cannot merge due to LargeObjectException: %s", toMerge.name()); return false; } catch (NoMergeBaseException e) { return false; diff --git a/java/com/google/gerrit/server/git/MergedByPushOp.java b/java/com/google/gerrit/server/git/MergedByPushOp.java index bb50218349..656202d829 100644 --- a/java/com/google/gerrit/server/git/MergedByPushOp.java +++ b/java/com/google/gerrit/server/git/MergedByPushOp.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.git; import static com.google.common.base.Preconditions.checkNotNull; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.ChangeMessage; import com.google.gerrit.reviewdb.client.LabelId; @@ -47,11 +48,9 @@ import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevWalk; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class MergedByPushOp implements BatchUpdateOp { - private static final Logger log = LoggerFactory.getLogger(MergedByPushOp.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public interface Factory { MergedByPushOp create( @@ -181,7 +180,10 @@ public class MergedByPushOp implements BatchUpdateOp { cm.setPatchSet(patchSet, info); cm.send(); } catch (Exception e) { - log.error("Cannot send email for submitted patch set " + psId, e); + logger + .atSevere() + .withCause(e) + .log("Cannot send email for submitted patch set %s", psId); } } diff --git a/java/com/google/gerrit/server/git/MultiProgressMonitor.java b/java/com/google/gerrit/server/git/MultiProgressMonitor.java index 2b9cad125f..1336d59f83 100644 --- a/java/com/google/gerrit/server/git/MultiProgressMonitor.java +++ b/java/com/google/gerrit/server/git/MultiProgressMonitor.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.git; import static java.util.concurrent.TimeUnit.NANOSECONDS; import com.google.common.base.Strings; +import com.google.common.flogger.FluentLogger; import java.io.IOException; import java.io.OutputStream; import java.util.List; @@ -28,8 +29,6 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.ProgressMonitor; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Progress reporting interface that multiplexes multiple sub-tasks. @@ -48,7 +47,7 @@ import org.slf4j.LoggerFactory; * multi-line progress messages would be impossible.) */ public class MultiProgressMonitor { - private static final Logger log = LoggerFactory.getLogger(MultiProgressMonitor.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); /** Constant indicating the total work units cannot be predicted. */ public static final int UNKNOWN = 0; @@ -215,10 +214,11 @@ public class MultiProgressMonitor { String.format( "(timeout %sms, cancelled)", TimeUnit.MILLISECONDS.convert(now - deadline, NANOSECONDS)); - log.warn( - String.format( - "MultiProgressMonitor worker killed after %sms" + detailMessage, // - TimeUnit.MILLISECONDS.convert(now - overallStart, NANOSECONDS))); + logger + .atWarning() + .log( + "MultiProgressMonitor worker killed after %sms: %s", + TimeUnit.MILLISECONDS.convert(now - overallStart, NANOSECONDS), detailMessage); } break; } @@ -232,7 +232,7 @@ public class MultiProgressMonitor { if (!done && workerFuture.isDone()) { // The worker may not have called end() explicitly, which is likely a // programming error. - log.warn("MultiProgressMonitor worker did not call end() before returning"); + logger.atWarning().log("MultiProgressMonitor worker did not call end() before returning"); end(); } } diff --git a/java/com/google/gerrit/server/git/SearchingChangeCacheImpl.java b/java/com/google/gerrit/server/git/SearchingChangeCacheImpl.java index 6ae8b91059..1b83097edc 100644 --- a/java/com/google/gerrit/server/git/SearchingChangeCacheImpl.java +++ b/java/com/google/gerrit/server/git/SearchingChangeCacheImpl.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.git; import com.google.auto.value.AutoValue; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.extensions.events.GitReferenceUpdatedListener; import com.google.gerrit.extensions.registration.DynamicSet; @@ -41,12 +42,11 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.concurrent.ExecutionException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class SearchingChangeCacheImpl implements GitReferenceUpdatedListener { - private static final Logger log = LoggerFactory.getLogger(SearchingChangeCacheImpl.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + static final String ID_CACHE = "changes"; public static class Module extends CacheModule { @@ -120,7 +120,7 @@ public class SearchingChangeCacheImpl implements GitReferenceUpdatedListener { } return Collections.unmodifiableList(cds); } catch (ExecutionException e) { - log.warn("Cannot fetch changes for " + project, e); + logger.atWarning().withCause(e).log("Cannot fetch changes for %s", project); return Collections.emptyList(); } } diff --git a/java/com/google/gerrit/server/git/TagSet.java b/java/com/google/gerrit/server/git/TagSet.java index 118223b6c1..10b34119e6 100644 --- a/java/com/google/gerrit/server/git/TagSet.java +++ b/java/com/google/gerrit/server/git/TagSet.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.git; import static org.eclipse.jgit.lib.ObjectIdSerializer.readWithoutMarker; import static org.eclipse.jgit.lib.ObjectIdSerializer.writeWithoutMarker; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.reviewdb.client.PatchSet; import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.reviewdb.client.RefNames; @@ -38,11 +39,9 @@ import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevSort; import org.eclipse.jgit.revwalk.RevWalk; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; class TagSet { - private static final Logger log = LoggerFactory.getLogger(TagSet.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final Project.NameKey projectName; private final Map refs; @@ -141,7 +140,7 @@ class TagSet { } catch (IOException err) { // Defer a cache update until later. No conclusion can be made // based on an exception reading from the repository storage. - log.warn("Error checking tags of " + projectName, err); + logger.atWarning().withCause(err).log("Error checking tags of %s", projectName); } } } finally { @@ -185,7 +184,7 @@ class TagSet { } } } catch (IOException e) { - log.warn("Error building tags for repository " + projectName, e); + logger.atWarning().withCause(e).log("Error building tags for repository %s", projectName); } } @@ -302,7 +301,7 @@ class TagSet { } catch (IncorrectObjectTypeException notCommit) { flags = new BitSet(); } catch (IOException e) { - log.warn("Error on " + ref.getName() + " of " + projectName, e); + logger.atWarning().withCause(e).log("Error on %s of %s", ref.getName(), projectName); flags = new BitSet(); } tags.add(new Tag(id, flags)); @@ -323,7 +322,7 @@ class TagSet { // For instance, refs from refs/cache-automerge // will often end up here. } catch (IOException e) { - log.warn("Error on " + ref.getName() + " of " + projectName, e); + logger.atWarning().withCause(e).log("Error on %s of %s", ref.getName(), projectName); } } diff --git a/java/com/google/gerrit/server/git/WorkQueue.java b/java/com/google/gerrit/server/git/WorkQueue.java index 4e5480a317..badb0d9031 100644 --- a/java/com/google/gerrit/server/git/WorkQueue.java +++ b/java/com/google/gerrit/server/git/WorkQueue.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.git; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.events.LifecycleListener; import com.google.gerrit.lifecycle.LifecycleModule; import com.google.gerrit.reviewdb.client.Project; @@ -44,12 +45,12 @@ import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Delayed execution of tasks using a background thread pool. */ @Singleton public class WorkQueue { + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + public static class Lifecycle implements LifecycleListener { private final WorkQueue workQueue; @@ -75,12 +76,11 @@ public class WorkQueue { } } - private static final Logger log = LoggerFactory.getLogger(WorkQueue.class); private static final UncaughtExceptionHandler LOG_UNCAUGHT_EXCEPTION = new UncaughtExceptionHandler() { @Override public void uncaughtException(Thread t, Throwable e) { - log.error("WorkQueue thread " + t.getName() + " threw exception", e); + logger.atSevere().withCause(e).log("WorkQueue thread %s threw exception", t.getName()); } }; @@ -479,7 +479,9 @@ public class WorkQueue { } } } catch (ClassNotFoundException | IllegalArgumentException | IllegalAccessException e) { - log.debug("Cannot get a proper name for TrustedListenableFutureTask: {}", e.getMessage()); + logger + .atFine() + .log("Cannot get a proper name for TrustedListenableFutureTask: %s", e.getMessage()); } return runnable.toString(); } diff --git a/java/com/google/gerrit/server/git/receive/AsyncReceiveCommits.java b/java/com/google/gerrit/server/git/receive/AsyncReceiveCommits.java index b7297fa245..3b621d87af 100644 --- a/java/com/google/gerrit/server/git/receive/AsyncReceiveCommits.java +++ b/java/com/google/gerrit/server/git/receive/AsyncReceiveCommits.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.git.receive; import com.google.common.collect.SetMultimap; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.common.data.Capable; import com.google.gerrit.extensions.restapi.AuthException; @@ -63,12 +64,10 @@ import org.eclipse.jgit.transport.PreReceiveHook; import org.eclipse.jgit.transport.ReceiveCommand; import org.eclipse.jgit.transport.ReceiveCommand.Result; import org.eclipse.jgit.transport.ReceivePack; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Hook that delegates to {@link ReceiveCommits} in a worker thread. */ public class AsyncReceiveCommits implements PreReceiveHook { - private static final Logger log = LoggerFactory.getLogger(AsyncReceiveCommits.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final String TIMEOUT_NAME = "ReceiveCommitsOverallTimeout"; @@ -272,11 +271,12 @@ public class AsyncReceiveCommits implements PreReceiveHook { w.progress.waitFor( executor.submit(scopePropagator.wrap(w)), timeoutMillis, TimeUnit.MILLISECONDS); } catch (ExecutionException e) { - log.warn( - String.format( + logger + .atWarning() + .withCause(e) + .log( "Error in ReceiveCommits while processing changes for project %s", - projectState.getName()), - e); + projectState.getName()); rp.sendError("internal error while processing changes"); // ReceiveCommits has tried its best to catch errors, so anything at this // point is very bad. diff --git a/java/com/google/gerrit/server/git/receive/BUILD b/java/com/google/gerrit/server/git/receive/BUILD index 4d24b4b7c8..fddb9d6657 100644 --- a/java/com/google/gerrit/server/git/receive/BUILD +++ b/java/com/google/gerrit/server/git/receive/BUILD @@ -14,9 +14,9 @@ java_library( "//lib:gwtorm", "//lib/auto:auto-value", "//lib/auto:auto-value-annotations", + "//lib/flogger:api", "//lib/guice", "//lib/guice:guice-assistedinject", "//lib/jgit/org.eclipse.jgit:jgit", - "//lib/log:api", ], ) diff --git a/java/com/google/gerrit/server/git/receive/HackPushNegotiateHook.java b/java/com/google/gerrit/server/git/receive/HackPushNegotiateHook.java index 7f0c626bb4..1001d046b1 100644 --- a/java/com/google/gerrit/server/git/receive/HackPushNegotiateHook.java +++ b/java/com/google/gerrit/server/git/receive/HackPushNegotiateHook.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.git.receive; import static org.eclipse.jgit.lib.RefDatabase.ALL; import com.google.common.collect.Sets; +import com.google.common.flogger.FluentLogger; import java.io.IOException; import java.util.Collection; import java.util.Collections; @@ -31,8 +32,6 @@ import org.eclipse.jgit.transport.AdvertiseRefsHook; import org.eclipse.jgit.transport.BaseReceivePack; import org.eclipse.jgit.transport.ServiceMayNotContinueException; import org.eclipse.jgit.transport.UploadPack; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Advertises part of history to git push clients. @@ -47,7 +46,7 @@ import org.slf4j.LoggerFactory; * a common ancestor. */ public class HackPushNegotiateHook implements AdvertiseRefsHook { - private static final Logger log = LoggerFactory.getLogger(HackPushNegotiateHook.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); /** Size of an additional ".have" line. */ private static final int HAVE_LINE_LEN = 4 + Constants.OBJECT_ID_STRING_LENGTH + 1 + 5 + 1; @@ -127,7 +126,7 @@ public class HackPushNegotiateHook implements AdvertiseRefsHook { } } } catch (IOException err) { - log.error("error trying to advertise history", err); + logger.atSevere().withCause(err).log("error trying to advertise history"); } return history; } finally { diff --git a/java/com/google/gerrit/server/git/receive/ReceiveCommits.java b/java/com/google/gerrit/server/git/receive/ReceiveCommits.java index c93c1d7875..879dd40311 100644 --- a/java/com/google/gerrit/server/git/receive/ReceiveCommits.java +++ b/java/com/google/gerrit/server/git/receive/ReceiveCommits.java @@ -56,6 +56,7 @@ import com.google.common.collect.MultimapBuilder; import com.google.common.collect.SetMultimap; import com.google.common.collect.Sets; import com.google.common.collect.SortedSetMultimap; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.common.TimeUtil; import com.google.gerrit.common.data.LabelType; @@ -209,12 +210,10 @@ import org.eclipse.jgit.transport.ReceiveCommand.Result; import org.eclipse.jgit.transport.ReceivePack; import org.kohsuke.args4j.CmdLineException; import org.kohsuke.args4j.Option; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Receives change upload using the Git receive-pack protocol. */ class ReceiveCommits { - private static final Logger log = LoggerFactory.getLogger(ReceiveCommits.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private enum ReceiveError { CONFIG_UPDATE( @@ -1738,7 +1737,7 @@ class ReceiveCommits { try { return repo.getFullBranch(); } catch (IOException e) { - log.error("Cannot read HEAD symref", e); + logger.atSevere().withCause(e).log("Cannot read HEAD symref"); return null; } } @@ -2707,20 +2706,23 @@ class ReceiveCommits { try { projectCache.evict(project); } catch (IOException e) { - log.warn("Cannot evict from project cache, name key: " + project.getName(), e); + logger + .atWarning() + .withCause(e) + .log("Cannot evict from project cache, name key: %s", project.getName()); } ProjectState ps = projectCache.get(project.getNameKey()); try { logDebug("Updating project description"); repo.setGitwebDescription(ps.getProject().getDescription()); } catch (IOException e) { - log.warn("cannot update description of " + project.getName(), e); + logger.atWarning().withCause(e).log("cannot update description of %s", project.getName()); } if (allProjectsName.equals(project.getNameKey())) { try { createGroupPermissionSyncer.syncIfNeeded(); } catch (IOException | ConfigInvalidException e) { - log.error("Can't sync create group permissions", e); + logger.atSevere().withCause(e).log("Can't sync create group permissions"); } } } @@ -3115,19 +3117,13 @@ class ReceiveCommits { } private void logDebug(String msg, Object... args) { - if (log.isDebugEnabled()) { - log.debug(receiveId + msg, args); + if (logger.atFine().isEnabled()) { + logger.atFine().logVarargs(receiveId + msg, args); } } private void logWarn(String msg, Throwable t) { - if (log.isWarnEnabled()) { - if (t != null) { - log.warn(receiveId + msg, t); - } else { - log.warn(receiveId + msg); - } - } + logger.atWarning().withCause(t).log("%s%s", receiveId, msg); } private void logWarn(String msg) { @@ -3135,13 +3131,7 @@ class ReceiveCommits { } private void logError(String msg, Throwable t) { - if (log.isErrorEnabled()) { - if (t != null) { - log.error(receiveId + msg, t); - } else { - log.error(receiveId + msg); - } - } + logger.atSevere().withCause(t).log("%s%s", receiveId, msg); } private void logError(String msg) { diff --git a/java/com/google/gerrit/server/git/receive/ReceiveCommitsAdvertiseRefsHook.java b/java/com/google/gerrit/server/git/receive/ReceiveCommitsAdvertiseRefsHook.java index 723fef4c02..8cbcc887d4 100644 --- a/java/com/google/gerrit/server/git/receive/ReceiveCommitsAdvertiseRefsHook.java +++ b/java/com/google/gerrit/server/git/receive/ReceiveCommitsAdvertiseRefsHook.java @@ -18,6 +18,7 @@ import com.google.auto.value.AutoValue; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.Maps; import com.google.common.collect.Sets; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.reviewdb.client.PatchSet; import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.reviewdb.client.RefNames; @@ -37,12 +38,10 @@ import org.eclipse.jgit.transport.AdvertiseRefsHook; import org.eclipse.jgit.transport.BaseReceivePack; import org.eclipse.jgit.transport.ServiceMayNotContinueException; import org.eclipse.jgit.transport.UploadPack; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Exposes only the non refs/changes/ reference names. */ public class ReceiveCommitsAdvertiseRefsHook implements AdvertiseRefsHook { - private static final Logger log = LoggerFactory.getLogger(ReceiveCommitsAdvertiseRefsHook.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); @VisibleForTesting @AutoValue @@ -120,7 +119,7 @@ public class ReceiveCommitsAdvertiseRefsHook implements AdvertiseRefsHook { } return r; } catch (OrmException err) { - log.error("Cannot list open changes of " + projectName, err); + logger.atSevere().withCause(err).log("Cannot list open changes of %s", projectName); return Collections.emptySet(); } } diff --git a/java/com/google/gerrit/server/git/receive/ReplaceOp.java b/java/com/google/gerrit/server/git/receive/ReplaceOp.java index 3b8091c094..1eb1d4e07e 100644 --- a/java/com/google/gerrit/server/git/receive/ReplaceOp.java +++ b/java/com/google/gerrit/server/git/receive/ReplaceOp.java @@ -23,6 +23,7 @@ import static org.eclipse.jgit.lib.Constants.R_HEADS; import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableListMultimap; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.common.data.LabelType; import com.google.gerrit.extensions.api.changes.NotifyHandling; @@ -78,10 +79,10 @@ import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.transport.PushCertificate; import org.eclipse.jgit.transport.ReceiveCommand; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class ReplaceOp implements BatchUpdateOp { + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + public interface Factory { ReplaceOp create( ProjectState projectState, @@ -97,8 +98,6 @@ public class ReplaceOp implements BatchUpdateOp { @Nullable PushCertificate pushCertificate); } - private static final Logger log = LoggerFactory.getLogger(ReplaceOp.class); - private static final String CHANGE_IS_CLOSED = "change is closed"; private final AccountResolver accountResolver; @@ -486,7 +485,7 @@ public class ReplaceOp implements BatchUpdateOp { try { fireCommentAddedEvent(ctx); } catch (Exception e) { - log.warn("comment-added event invocation failed", e); + logger.atWarning().withCause(e).log("comment-added event invocation failed"); } if (mergedByPushOp != null) { mergedByPushOp.postUpdate(ctx); @@ -516,7 +515,10 @@ public class ReplaceOp implements BatchUpdateOp { cm.addExtraCC(recipients.getCcOnly()); cm.send(); } catch (Exception e) { - log.error("Cannot send email for new patch set " + newPatchSet.getId(), e); + logger + .atSevere() + .withCause(e) + .log("Cannot send email for new patch set %s", newPatchSet.getId()); } } @@ -600,7 +602,7 @@ public class ReplaceOp implements BatchUpdateOp { } return null; } catch (IOException e) { - log.warn("Can't check for already submitted change", e); + logger.atWarning().withCause(e).log("Can't check for already submitted change"); return null; } } diff --git a/java/com/google/gerrit/server/git/validators/CommitValidators.java b/java/com/google/gerrit/server/git/validators/CommitValidators.java index e2ab1e920e..88a62caf53 100644 --- a/java/com/google/gerrit/server/git/validators/CommitValidators.java +++ b/java/com/google/gerrit/server/git/validators/CommitValidators.java @@ -23,6 +23,7 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Splitter; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.FooterConstants; import com.google.gerrit.common.Nullable; import com.google.gerrit.common.PageLinks; @@ -77,11 +78,9 @@ import org.eclipse.jgit.revwalk.FooterLine; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.util.SystemReader; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class CommitValidators { - private static final Logger log = LoggerFactory.getLogger(CommitValidators.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static final Pattern NEW_PATCHSET_PATTERN = Pattern.compile("^" + REFS_CHANGES + "(?:[0-9][0-9]/)?([1-9][0-9]*)(?:/[1-9][0-9]*)?$"); @@ -227,7 +226,10 @@ public class CommitValidators { messages.addAll(commitValidator.onCommitReceived(receiveEvent)); } } catch (CommitValidationException e) { - log.debug("CommitValidationException occurred: {}", e.getFullMessage(), e); + logger + .atFine() + .withCause(e) + .log("CommitValidationException occurred: %s", e.getFullMessage()); // Keep the old messages (and their order) in case of an exception messages.addAll(e.getMessages()); throw new CommitValidationException(e.getMessage(), messages); @@ -443,14 +445,14 @@ public class CommitValidators { throw new ConfigInvalidException("invalid project configuration"); } } catch (ConfigInvalidException | IOException e) { - log.error( - "User " - + user.getLoggableName() - + " tried to push an invalid project configuration " - + receiveEvent.command.getNewId().name() - + " for project " - + receiveEvent.project.getName(), - e); + logger + .atSevere() + .withCause(e) + .log( + "User %s tried to push an invalid project configuration %s for project %s", + user.getLoggableName(), + receiveEvent.command.getNewId().name(), + receiveEvent.project.getName()); throw new CommitValidationException("invalid project configuration", messages); } } @@ -479,7 +481,7 @@ public class CommitValidators { } catch (AuthException e) { throw new CommitValidationException("you are not allowed to upload merges"); } catch (PermissionBackendException e) { - log.error("cannot check MERGE", e); + logger.atSevere().withCause(e).log("cannot check MERGE"); throw new CommitValidationException("internal auth error"); } } @@ -554,7 +556,7 @@ public class CommitValidators { throw new CommitValidationException( "not Signed-off-by author/committer/uploader in commit message footer"); } catch (PermissionBackendException e) { - log.error("cannot check FORGE_COMMITTER", e); + logger.atSevere().withCause(e).log("cannot check FORGE_COMMITTER"); throw new CommitValidationException("internal auth error"); } } @@ -590,7 +592,7 @@ public class CommitValidators { "invalid author", invalidEmail(receiveEvent.commit, "author", author, user, canonicalWebUrl)); } catch (PermissionBackendException e) { - log.error("cannot check FORGE_AUTHOR", e); + logger.atSevere().withCause(e).log("cannot check FORGE_AUTHOR"); throw new CommitValidationException("internal auth error"); } } @@ -624,7 +626,7 @@ public class CommitValidators { "invalid committer", invalidEmail(receiveEvent.commit, "committer", committer, user, canonicalWebUrl)); } catch (PermissionBackendException e) { - log.error("cannot check FORGE_COMMITTER", e); + logger.atSevere().withCause(e).log("cannot check FORGE_COMMITTER"); throw new CommitValidationException("internal auth error"); } } @@ -663,7 +665,7 @@ public class CommitValidators { gerritIdent.getEmailAddress(), RefPermission.FORGE_SERVER.name())); } catch (PermissionBackendException e) { - log.error("cannot check FORGE_SERVER", e); + logger.atSevere().withCause(e).log("cannot check FORGE_SERVER"); throw new CommitValidationException("internal auth error"); } } @@ -690,7 +692,7 @@ public class CommitValidators { return Collections.emptyList(); } catch (IOException e) { String m = "error checking banned commits"; - log.warn(m, e); + logger.atWarning().withCause(e).log(m); throw new CommitValidationException(m, e); } } @@ -729,7 +731,7 @@ public class CommitValidators { return msgs; } catch (IOException | ConfigInvalidException e) { String m = "error validating external IDs"; - log.warn(m, e); + logger.atWarning().withCause(e).log(m); throw new CommitValidationException(m, e); } } @@ -787,7 +789,7 @@ public class CommitValidators { } } catch (IOException e) { String m = String.format("Validating update for account %s failed", accountId.get()); - log.error(m, e); + logger.atSevere().withCause(e).log(m); throw new CommitValidationException(m, e); } return Collections.emptyList(); diff --git a/java/com/google/gerrit/server/git/validators/MergeValidators.java b/java/com/google/gerrit/server/git/validators/MergeValidators.java index 5579e0e40e..94d9996400 100644 --- a/java/com/google/gerrit/server/git/validators/MergeValidators.java +++ b/java/com/google/gerrit/server/git/validators/MergeValidators.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.git.validators; import com.google.common.base.Joiner; import com.google.common.collect.ImmutableList; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.api.projects.ProjectConfigEntryType; import com.google.gerrit.extensions.registration.DynamicMap; import com.google.gerrit.extensions.registration.DynamicMap.Entry; @@ -49,11 +50,9 @@ import java.util.List; import org.eclipse.jgit.errors.ConfigInvalidException; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevWalk; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class MergeValidators { - private static final Logger log = LoggerFactory.getLogger(MergeValidators.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final DynamicSet mergeValidationListeners; private final ProjectConfigValidator.Factory projectConfigValidatorFactory; @@ -168,7 +167,7 @@ public class MergeValidators { } catch (AuthException e) { throw new MergeValidationException(SET_BY_ADMIN); } catch (PermissionBackendException e) { - log.warn("Cannot check ADMINISTRATE_SERVER", e); + logger.atWarning().withCause(e).log("Cannot check ADMINISTRATE_SERVER"); throw new MergeValidationException("validation unavailable"); } if (allUsersName.equals(destProject.getNameKey()) @@ -280,7 +279,7 @@ public class MergeValidators { return; } } catch (IOException | OrmException e) { - log.error("Cannot validate account update", e); + logger.atSevere().withCause(e).log("Cannot validate account update"); throw new MergeValidationException("account validation unavailable"); } @@ -291,7 +290,7 @@ public class MergeValidators { "invalid account configuration: " + Joiner.on("; ").join(errorMessages)); } } catch (IOException e) { - log.error("Cannot validate account update", e); + logger.atSevere().withCause(e).log("Cannot validate account update"); throw new MergeValidationException("account validation unavailable"); } } diff --git a/java/com/google/gerrit/server/git/validators/RefOperationValidators.java b/java/com/google/gerrit/server/git/validators/RefOperationValidators.java index 1e031dac9a..1df8da4d78 100644 --- a/java/com/google/gerrit/server/git/validators/RefOperationValidators.java +++ b/java/com/google/gerrit/server/git/validators/RefOperationValidators.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.git.validators; import com.google.common.base.Predicate; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.registration.DynamicSet; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.reviewdb.client.Account; @@ -34,12 +35,11 @@ import java.util.ArrayList; import java.util.List; import org.eclipse.jgit.lib.RefUpdate; import org.eclipse.jgit.transport.ReceiveCommand; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class RefOperationValidators { + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + private static final GetErrorMessages GET_ERRORS = new GetErrorMessages(); - private static final Logger LOG = LoggerFactory.getLogger(RefOperationValidators.class); public interface Factory { RefOperationValidators create(Project project, IdentifiedUser user, ReceiveCommand cmd); @@ -101,7 +101,7 @@ public class RefOperationValidators { String.format( "Ref \"%s\" %S in project %s validation failed", event.command.getRefName(), event.command.getType(), event.project.getName()); - LOG.error(header); + logger.atSevere().log(header); throw new RefOperationValidationException(header, errors); } diff --git a/java/com/google/gerrit/server/group/PeriodicGroupIndexer.java b/java/com/google/gerrit/server/group/PeriodicGroupIndexer.java index d30945f141..dbbc3f690a 100644 --- a/java/com/google/gerrit/server/group/PeriodicGroupIndexer.java +++ b/java/com/google/gerrit/server/group/PeriodicGroupIndexer.java @@ -18,6 +18,7 @@ import static com.google.common.collect.ImmutableSet.toImmutableSet; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.GroupReference; import com.google.gerrit.extensions.events.LifecycleListener; import com.google.gerrit.lifecycle.LifecycleModule; @@ -35,8 +36,6 @@ import com.google.inject.Provider; import java.util.concurrent.TimeUnit; import org.eclipse.jgit.lib.Config; import org.eclipse.jgit.lib.Repository; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Runnable to schedule periodic group reindexing. @@ -58,7 +57,7 @@ import org.slf4j.LoggerFactory; * slave. */ public class PeriodicGroupIndexer implements Runnable { - private static final Logger log = LoggerFactory.getLogger(PeriodicGroupIndexer.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static class Module extends LifecycleModule { @Override @@ -88,7 +87,7 @@ public class PeriodicGroupIndexer implements Runnable { boolean isEnabled = cfg.getBoolean("index", "scheduledIndexer", "enabled", true); if (!isEnabled) { - log.warn("index.scheduledIndexer is disabled"); + logger.atWarning().log("index.scheduledIndexer is disabled"); return; } @@ -146,9 +145,9 @@ public class PeriodicGroupIndexer implements Runnable { } } groupUuids = newGroupUuids; - log.info("Run group indexer, {} groups reindexed", reindexCounter); + logger.atInfo().log("Run group indexer, %s groups reindexed", reindexCounter); } catch (Throwable t) { - log.error("Failed to reindex groups", t); + logger.atSevere().withCause(t).log("Failed to reindex groups"); } } } diff --git a/java/com/google/gerrit/server/group/db/AuditLogReader.java b/java/com/google/gerrit/server/group/db/AuditLogReader.java index 967b0d270c..5c1b1007f7 100644 --- a/java/com/google/gerrit/server/group/db/AuditLogReader.java +++ b/java/com/google/gerrit/server/group/db/AuditLogReader.java @@ -18,6 +18,7 @@ import com.google.auto.value.AutoValue; import com.google.common.collect.ImmutableList; import com.google.common.collect.ListMultimap; import com.google.common.collect.MultimapBuilder; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.reviewdb.client.AccountGroup; import com.google.gerrit.reviewdb.client.AccountGroupByIdAud; @@ -41,13 +42,11 @@ import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevSort; import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.util.RawParseUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** NoteDb reader for group audit log. */ @Singleton public class AuditLogReader { - private static final Logger log = LoggerFactory.getLogger(AuditLogReader.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final String serverId; @@ -184,11 +183,11 @@ public class AuditLogReader { } private static void logInvalid(AccountGroup.UUID uuid, RevCommit c, FooterLine line) { - log.debug( - "Invalid footer line in commit {} while parsing audit log for group {}: {}", - c.name(), - uuid, - line); + logger + .atFine() + .log( + "Invalid footer line in commit %s while parsing audit log for group %s: %s", + c.name(), uuid, line); } private ImmutableList parseCommits(Repository repo, AccountGroup.UUID uuid) diff --git a/java/com/google/gerrit/server/group/db/GroupsNoteDbConsistencyChecker.java b/java/com/google/gerrit/server/group/db/GroupsNoteDbConsistencyChecker.java index 9f0cb3ac54..b5324f12cc 100644 --- a/java/com/google/gerrit/server/group/db/GroupsNoteDbConsistencyChecker.java +++ b/java/com/google/gerrit/server/group/db/GroupsNoteDbConsistencyChecker.java @@ -21,6 +21,7 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; import com.google.common.collect.ImmutableList; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.common.data.GroupReference; import com.google.gerrit.extensions.api.config.ConsistencyCheckInfo; @@ -46,13 +47,12 @@ import org.eclipse.jgit.notes.Note; import org.eclipse.jgit.notes.NoteMap; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevWalk; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Check the referential integrity of NoteDb group storage. */ @Singleton public class GroupsNoteDbConsistencyChecker { - private static final Logger log = LoggerFactory.getLogger(GroupsNoteDbConsistencyChecker.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + /** * The result of a consistency check. The UUID map is only non-null if no problems were detected. */ @@ -271,9 +271,9 @@ public class GroupsNoteDbConsistencyChecker { public static void logConsistencyProblem(ConsistencyProblemInfo p) { if (p.status == ConsistencyProblemInfo.Status.WARNING) { - log.warn(p.message); + logger.atWarning().log(p.message); } else { - log.error(p.message); + logger.atSevere().log(p.message); } } diff --git a/java/com/google/gerrit/server/group/db/RenameGroupOp.java b/java/com/google/gerrit/server/group/db/RenameGroupOp.java index 57acc3bcd5..6a0da98a51 100644 --- a/java/com/google/gerrit/server/group/db/RenameGroupOp.java +++ b/java/com/google/gerrit/server/group/db/RenameGroupOp.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.group.db; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.GroupReference; import com.google.gerrit.reviewdb.client.AccountGroup; import com.google.gerrit.reviewdb.client.Project; @@ -32,10 +33,10 @@ import java.util.concurrent.TimeUnit; import org.eclipse.jgit.errors.ConfigInvalidException; import org.eclipse.jgit.errors.RepositoryNotFoundException; import org.eclipse.jgit.lib.PersonIdent; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; class RenameGroupOp extends DefaultQueueOp { + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + interface Factory { RenameGroupOp create( @Assisted("author") PersonIdent author, @@ -45,7 +46,6 @@ class RenameGroupOp extends DefaultQueueOp { } private static final int MAX_TRIES = 10; - private static final Logger log = LoggerFactory.getLogger(RenameGroupOp.class); private final ProjectCache projectCache; private final MetaDataUpdate.Server metaDataUpdateFactory; @@ -93,7 +93,7 @@ class RenameGroupOp extends DefaultQueueOp { } catch (RepositoryNotFoundException noProject) { continue; } catch (ConfigInvalidException | IOException err) { - log.error("Cannot rename group " + oldName + " in " + projectName, err); + logger.atSevere().withCause(err).log("Cannot rename group %s in %s", oldName, projectName); } } @@ -127,14 +127,12 @@ class RenameGroupOp extends DefaultQueueOp { projectCache.evict(config.getProject()); success = true; } catch (IOException e) { - log.error( - "Could not commit rename of group " - + oldName - + " to " - + newName - + " in " - + md.getProjectName().get(), - e); + logger + .atSevere() + .withCause(e) + .log( + "Could not commit rename of group %s to %s in %s", + oldName, newName, md.getProjectName().get()); try { Thread.sleep(25 /* milliseconds */); } catch (InterruptedException wakeUp) { @@ -145,13 +143,11 @@ class RenameGroupOp extends DefaultQueueOp { if (!success) { if (tryingAgain) { - log.warn( - "Could not rename group " - + oldName - + " to " - + newName - + " in " - + md.getProjectName().get()); + logger + .atWarning() + .log( + "Could not rename group %s to %s in %s", + oldName, newName, md.getProjectName().get()); } else { retryOn.add(md.getProjectName()); } diff --git a/java/com/google/gerrit/server/index/OnlineReindexer.java b/java/com/google/gerrit/server/index/OnlineReindexer.java index ee2a76ec18..709bf2b820 100644 --- a/java/com/google/gerrit/server/index/OnlineReindexer.java +++ b/java/com/google/gerrit/server/index/OnlineReindexer.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.index; import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.collect.Lists; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.registration.DynamicSet; import com.google.gerrit.index.Index; import com.google.gerrit.index.IndexCollection; @@ -25,11 +26,9 @@ import com.google.gerrit.index.SiteIndexer; import java.io.IOException; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class OnlineReindexer> { - private static final Logger log = LoggerFactory.getLogger(OnlineReindexer.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final String name; private final IndexCollection indexes; @@ -64,7 +63,10 @@ public class OnlineReindexer> { reindex(); ok = true; } catch (IOException e) { - log.error("Online reindex of {} schema version {} failed", name, version(index), e); + logger + .atSevere() + .withCause(e) + .log("Online reindex of %s schema version %s failed", name, version(index)); } finally { running.set(false); if (!ok) { @@ -103,27 +105,26 @@ public class OnlineReindexer> { "not an active write schema version: %s %s", name, newVersion); - log.info( - "Starting online reindex of {} from schema version {} to {}", - name, - version(indexes.getSearchIndex()), - version(index)); + logger + .atInfo() + .log( + "Starting online reindex of %s from schema version %s to %s", + name, version(indexes.getSearchIndex()), version(index)); if (oldVersion != newVersion) { index.deleteAll(); } SiteIndexer.Result result = batchIndexer.indexAll(index); if (!result.success()) { - log.error( - "Online reindex of {} schema version {} failed. Successfully" - + " indexed {}, failed to index {}", - name, - version(index), - result.doneCount(), - result.failedCount()); + logger + .atSevere() + .log( + "Online reindex of %s schema version %s failed. Successfully" + + " indexed %s, failed to index %s", + name, version(index), result.doneCount(), result.failedCount()); return; } - log.info("Reindex {} to version {} complete", name, version(index)); + logger.atInfo().log("Reindex %s to version %s complete", name, version(index)); activateIndex(); for (OnlineUpgradeListener listener : listeners) { listener.onSuccess(name, oldVersion, newVersion); @@ -132,11 +133,11 @@ public class OnlineReindexer> { public void activateIndex() { indexes.setSearchIndex(index); - log.info("Using {} schema version {}", name, version(index)); + logger.atInfo().log("Using %s schema version %s", name, version(index)); try { index.markReady(true); } catch (IOException e) { - log.warn("Error activating new {} schema version {}", name, version(index)); + logger.atWarning().log("Error activating new %s schema version %s", name, version(index)); } List toRemove = Lists.newArrayListWithExpectedSize(1); @@ -150,7 +151,7 @@ public class OnlineReindexer> { i.markReady(false); indexes.removeWriteIndex(version(i)); } catch (IOException e) { - log.warn("Error deactivating old {} schema version {}", name, version(i)); + logger.atWarning().log("Error deactivating old %s schema version %s", name, version(i)); } } } diff --git a/java/com/google/gerrit/server/index/account/AllAccountsIndexer.java b/java/com/google/gerrit/server/index/account/AllAccountsIndexer.java index ae1fec61c1..0015268880 100644 --- a/java/com/google/gerrit/server/index/account/AllAccountsIndexer.java +++ b/java/com/google/gerrit/server/index/account/AllAccountsIndexer.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.index.account; import static com.google.gerrit.server.git.QueueProvider.QueueType.BATCH; import com.google.common.base.Stopwatch; +import com.google.common.flogger.FluentLogger; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListeningExecutorService; @@ -38,12 +39,10 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import org.eclipse.jgit.lib.ProgressMonitor; import org.eclipse.jgit.lib.TextProgressMonitor; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class AllAccountsIndexer extends SiteIndexer { - private static final Logger log = LoggerFactory.getLogger(AllAccountsIndexer.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final ListeningExecutorService executor; private final Accounts accounts; @@ -68,7 +67,7 @@ public class AllAccountsIndexer extends SiteIndexer { - private static final Logger log = LoggerFactory.getLogger(AllChangesIndexer.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final SchemaFactory schemaFactory; private final ChangeData.Factory changeDataFactory; @@ -118,10 +117,10 @@ public class AllChangesIndexer extends SiteIndexer projects.size() / 2) { - log.error("Over 50% of the projects could not be collected: aborted"); + logger.atSevere().log("Over 50%% of the projects could not be collected: aborted"); return new Result(sw, false, 0, 0); } } @@ -176,7 +175,7 @@ public class AllChangesIndexer extends SiteIndexer 10) { - log.error( - "Failed {}/{} changes ({}%); not marking new index as ready", - nFailed, nTotal, Math.round(pctFailed)); + logger + .atSevere() + .log( + "Failed %s/%s changes (%s%%); not marking new index as ready", + nFailed, nTotal, Math.round(pctFailed)); ok.set(false); } return new Result(sw, ok.get(), nDone, nFailed); @@ -228,7 +229,7 @@ public class AllChangesIndexer extends SiteIndexer index(db, r)); } catch (RepositoryNotFoundException rnfe) { - log.error(rnfe.getMessage()); + logger.atSevere().log(rnfe.getMessage()); } return null; } @@ -255,12 +256,7 @@ public class AllChangesIndexer extends SiteIndexer reviewerState = Enums.getIfPresent(ReviewerStateInternal.class, v.substring(0, i)); if (!reviewerState.isPresent()) { - log.warn( - "Failed to parse reviewer state of reviewer field from change {}: {}", - changeId.get(), - v); + logger + .atWarning() + .log( + "Failed to parse reviewer state of reviewer field from change %s: %s", + changeId.get(), v); continue; } Optional accountId = Account.Id.tryParse(v.substring(i + 1, i2)); if (!accountId.isPresent()) { - log.warn( - "Failed to parse account ID of reviewer field from change {}: {}", changeId.get(), v); + logger + .atWarning() + .log( + "Failed to parse account ID of reviewer field from change %s: %s", + changeId.get(), v); continue; } Long l = Longs.tryParse(v.substring(i2 + 1, v.length())); if (l == null) { - log.warn( - "Failed to parse timestamp of reviewer field from change {}: {}", changeId.get(), v); + logger + .atWarning() + .log( + "Failed to parse timestamp of reviewer field from change %s: %s", + changeId.get(), v); continue; } Timestamp timestamp = new Timestamp(l); @@ -318,7 +326,9 @@ public class ChangeField { for (String v : values) { int i = v.indexOf(','); if (i < 0) { - log.warn("Invalid value for reviewer by email field from change {}: {}", changeId.get(), v); + logger + .atWarning() + .log("Invalid value for reviewer by email field from change %s: %s", changeId.get(), v); continue; } @@ -337,28 +347,31 @@ public class ChangeField { com.google.common.base.Optional reviewerState = Enums.getIfPresent(ReviewerStateInternal.class, v.substring(0, i)); if (!reviewerState.isPresent()) { - log.warn( - "Failed to parse reviewer state of reviewer by email field from change {}: {}", - changeId.get(), - v); + logger + .atWarning() + .log( + "Failed to parse reviewer state of reviewer by email field from change %s: %s", + changeId.get(), v); continue; } Address address = Address.tryParse(v.substring(i + 1, i2)); if (address == null) { - log.warn( - "Failed to parse address of reviewer by email field from change {}: {}", - changeId.get(), - v); + logger + .atWarning() + .log( + "Failed to parse address of reviewer by email field from change %s: %s", + changeId.get(), v); continue; } Long l = Longs.tryParse(v.substring(i2 + 1, v.length())); if (l == null) { - log.warn( - "Failed to parse timestamp of reviewer by email field from change {}: {}", - changeId.get(), - v); + logger + .atWarning() + .log( + "Failed to parse timestamp of reviewer by email field from change %s: %s", + changeId.get(), v); continue; } Timestamp timestamp = new Timestamp(l); diff --git a/java/com/google/gerrit/server/index/change/ChangeIndexer.java b/java/com/google/gerrit/server/index/change/ChangeIndexer.java index 55f8b48805..8bad926f60 100644 --- a/java/com/google/gerrit/server/index/change/ChangeIndexer.java +++ b/java/com/google/gerrit/server/index/change/ChangeIndexer.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.index.change; import static com.google.gerrit.server.extensions.events.EventUtil.logEventListenerError; import static com.google.gerrit.server.git.QueueProvider.QueueType.BATCH; +import com.google.common.flogger.FluentLogger; import com.google.common.util.concurrent.Atomics; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; @@ -56,8 +57,6 @@ import java.util.concurrent.Future; import java.util.concurrent.atomic.AtomicReference; import org.eclipse.jgit.errors.RepositoryNotFoundException; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Helper for (re)indexing a change document. @@ -66,7 +65,7 @@ import org.slf4j.LoggerFactory; * fields and/or update the index. */ public class ChangeIndexer { - private static final Logger log = LoggerFactory.getLogger(ChangeIndexer.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public interface Factory { ChangeIndexer create(ListeningExecutorService executor, ChangeIndex index); @@ -379,7 +378,7 @@ public class ChangeIndexer { } } } catch (Exception e) { - log.error("Failed to execute " + this, e); + logger.atSevere().withCause(e).log("Failed to execute %s", this); throw e; } } @@ -419,7 +418,7 @@ public class ChangeIndexer { for (ChangeIndex i : getWriteIndexes()) { i.delete(id); } - log.info("Deleted change {} from index.", id.get()); + logger.atInfo().log("Deleted change %s from index.", id.get()); fireChangeDeletedFromIndexEvent(id.get()); return null; } @@ -438,15 +437,16 @@ public class ChangeIndexer { return true; } } catch (NoSuchChangeException nsce) { - log.debug("Change {} was deleted, aborting reindexing the change.", id.get()); + logger.atFine().log("Change %s was deleted, aborting reindexing the change.", id.get()); } catch (Exception e) { if (!isCausedByRepositoryNotFoundException(e)) { throw e; } - log.debug( - "Change {} belongs to deleted project {}, aborting reindexing the change.", - id.get(), - project.get()); + logger + .atFine() + .log( + "Change %s belongs to deleted project %s, aborting reindexing the change.", + id.get(), project.get()); } return false; } diff --git a/java/com/google/gerrit/server/index/change/ReindexAfterRefUpdate.java b/java/com/google/gerrit/server/index/change/ReindexAfterRefUpdate.java index 0b76b1e155..609432b3a7 100644 --- a/java/com/google/gerrit/server/index/change/ReindexAfterRefUpdate.java +++ b/java/com/google/gerrit/server/index/change/ReindexAfterRefUpdate.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.index.change; import static com.google.common.util.concurrent.MoreExecutors.directExecutor; import static com.google.gerrit.server.query.change.ChangeData.asChanges; +import com.google.common.flogger.FluentLogger; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListeningExecutorService; @@ -47,11 +48,9 @@ import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.Future; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class ReindexAfterRefUpdate implements GitReferenceUpdatedListener { - private static final Logger log = LoggerFactory.getLogger(ReindexAfterRefUpdate.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final OneOffRequestContext requestContext; private final Provider queryProvider; @@ -97,7 +96,7 @@ public class ReindexAfterRefUpdate implements GitReferenceUpdatedListener { accountCache.evict(accountId); indexer.get().index(accountId); } catch (IOException e) { - log.error(String.format("Reindex account %s failed.", accountId), e); + logger.atSevere().withCause(e).log("Reindex account %s failed.", accountId); } } } @@ -140,7 +139,7 @@ public class ReindexAfterRefUpdate implements GitReferenceUpdatedListener { try (ManualRequestContext ctx = requestContext.open()) { return impl(ctx); } catch (Exception e) { - log.error("Failed to reindex changes after " + event, e); + logger.atSevere().withCause(e).log("Failed to reindex changes after %s", event); throw e; } } diff --git a/java/com/google/gerrit/server/index/change/StalenessChecker.java b/java/com/google/gerrit/server/index/change/StalenessChecker.java index 6c31369e40..208e949686 100644 --- a/java/com/google/gerrit/server/index/change/StalenessChecker.java +++ b/java/com/google/gerrit/server/index/change/StalenessChecker.java @@ -28,6 +28,7 @@ import com.google.common.collect.MultimapBuilder; import com.google.common.collect.SetMultimap; import com.google.common.collect.Sets; import com.google.common.collect.Streams; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.index.IndexConfig; import com.google.gerrit.reviewdb.client.Change; @@ -49,12 +50,10 @@ import java.util.Set; import java.util.regex.Pattern; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Repository; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class StalenessChecker { - private static final Logger log = LoggerFactory.getLogger(StalenessChecker.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static final ImmutableSet FIELDS = ImmutableSet.of( @@ -200,7 +199,7 @@ public class StalenessChecker { } return false; } catch (IOException e) { - log.warn("error checking staleness of {} in {}", id, project, e); + logger.atWarning().withCause(e).log("error checking staleness of %s in %s", id, project); return true; } } diff --git a/java/com/google/gerrit/server/index/group/AllGroupsIndexer.java b/java/com/google/gerrit/server/index/group/AllGroupsIndexer.java index c90bece1b4..2823c2e67f 100644 --- a/java/com/google/gerrit/server/index/group/AllGroupsIndexer.java +++ b/java/com/google/gerrit/server/index/group/AllGroupsIndexer.java @@ -18,6 +18,7 @@ import static com.google.common.collect.ImmutableList.toImmutableList; import static com.google.gerrit.server.git.QueueProvider.QueueType.BATCH; import com.google.common.base.Stopwatch; +import com.google.common.flogger.FluentLogger; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListeningExecutorService; @@ -42,12 +43,10 @@ import java.util.concurrent.atomic.AtomicInteger; import org.eclipse.jgit.errors.ConfigInvalidException; import org.eclipse.jgit.lib.ProgressMonitor; import org.eclipse.jgit.lib.TextProgressMonitor; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class AllGroupsIndexer extends SiteIndexer { - private static final Logger log = LoggerFactory.getLogger(AllGroupsIndexer.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final ListeningExecutorService executor; private final GroupCache groupCache; @@ -72,7 +71,7 @@ public class AllGroupsIndexer extends SiteIndexer { - - private static final Logger log = LoggerFactory.getLogger(AllProjectsIndexer.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final ListeningExecutorService executor; private final ProjectCache projectCache; @@ -93,7 +91,7 @@ public class AllProjectsIndexer extends SiteIndexer mailMessages = new ArrayList<>(numMessages); for (int i = 1; i <= numMessages; i++) { @@ -108,21 +108,23 @@ public class ImapMailReceiver extends MailReceiver { if (imap.store(i + ":" + i, "+FLAGS", "(\\Deleted)")) { pendingDeletion.remove(mailMessage.id()); } else { - log.error("Could not mark mail message as deleted: " + mailMessage.id()); + logger + .atSevere() + .log("Could not mark mail message as deleted: %s", mailMessage.id()); } } else { mailMessages.add(mailMessage); } } catch (MailParsingException e) { - log.error("Exception while parsing email after IMAP fetch", e); + logger.atSevere().withCause(e).log("Exception while parsing email after IMAP fetch"); } } else { - log.error("IMAP fetch failed. Will retry in next fetch cycle."); + logger.atSevere().log("IMAP fetch failed. Will retry in next fetch cycle."); } } // Permanently delete emails marked for deletion if (!imap.expunge()) { - log.error("Could not expunge IMAP emails"); + logger.atSevere().log("Could not expunge IMAP emails"); } dispatchMailProcessor(mailMessages, async); } finally { diff --git a/java/com/google/gerrit/server/mail/receive/MailHeaderParser.java b/java/com/google/gerrit/server/mail/receive/MailHeaderParser.java index 05525bd207..224df9aaec 100644 --- a/java/com/google/gerrit/server/mail/receive/MailHeaderParser.java +++ b/java/com/google/gerrit/server/mail/receive/MailHeaderParser.java @@ -16,18 +16,17 @@ package com.google.gerrit.server.mail.receive; import com.google.common.base.Splitter; import com.google.common.base.Strings; +import com.google.common.flogger.FluentLogger; import com.google.common.primitives.Ints; import com.google.gerrit.server.mail.MailHeader; import com.google.gerrit.server.mail.MailUtil; import java.sql.Timestamp; import java.time.Instant; import java.time.format.DateTimeParseException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Parse metadata from inbound email */ public class MailHeaderParser { - private static final Logger log = LoggerFactory.getLogger(MailHeaderParser.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static MailMetadata parse(MailMessage m) { MailMetadata metadata = new MailMetadata(); @@ -47,7 +46,10 @@ public class MailHeaderParser { try { metadata.timestamp = Timestamp.from(MailUtil.rfcDateformatter.parse(ts, Instant::from)); } catch (DateTimeParseException e) { - log.error("Mail: Error while parsing timestamp from header of message " + m.id(), e); + logger + .atSevere() + .withCause(e) + .log("Mail: Error while parsing timestamp from header of message %s", m.id()); } } else if (header.startsWith(MailHeader.MESSAGE_TYPE.fieldWithDelimiter())) { metadata.messageType = @@ -93,7 +95,10 @@ public class MailHeaderParser { try { metadata.timestamp = Timestamp.from(MailUtil.rfcDateformatter.parse(ts, Instant::from)); } catch (DateTimeParseException e) { - log.error("Mail: Error while parsing timestamp from footer of message " + m.id(), e); + logger + .atSevere() + .withCause(e) + .log("Mail: Error while parsing timestamp from footer of message %s", m.id()); } } else if (metadata.messageType == null && line.contains(MailHeader.MESSAGE_TYPE.getName())) { metadata.messageType = extractFooter(MailHeader.MESSAGE_TYPE.withDelimiter(), line); diff --git a/java/com/google/gerrit/server/mail/receive/MailProcessor.java b/java/com/google/gerrit/server/mail/receive/MailProcessor.java index c558d63870..add2c6dfe2 100644 --- a/java/com/google/gerrit/server/mail/receive/MailProcessor.java +++ b/java/com/google/gerrit/server/mail/receive/MailProcessor.java @@ -19,6 +19,7 @@ import static java.util.stream.Collectors.toList; import com.google.common.base.Strings; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ImmutableList; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.TimeUtil; import com.google.gerrit.extensions.api.changes.NotifyHandling; import com.google.gerrit.extensions.client.Side; @@ -70,13 +71,11 @@ import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** A service that can attach the comments from a {@link MailMessage} to a change. */ @Singleton public class MailProcessor { - private static final Logger log = LoggerFactory.getLogger(MailProcessor.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final Emails emails; private final InboundEmailRejectionSender.Factory emailRejectionSender; @@ -145,11 +144,11 @@ public class MailProcessor { throws OrmException, UpdateException, RestApiException, IOException { for (DynamicMap.Entry filter : mailFilters) { if (!filter.getProvider().get().shouldProcessMessage(message)) { - log.warn( - "Message {} filtered by plugin {} {}. Will delete message.", - message.id(), - filter.getPluginName(), - filter.getExportName()); + logger + .atWarning() + .log( + "Message %s filtered by plugin %s %s. Will delete message.", + message.id(), filter.getPluginName(), filter.getExportName()); return; } } @@ -157,10 +156,11 @@ public class MailProcessor { MailMetadata metadata = MailHeaderParser.parse(message); if (!metadata.hasRequiredFields()) { - log.error( - "Message {} is missing required metadata, have {}. Will delete message.", - message.id(), - metadata); + logger + .atSevere() + .log( + "Message %s is missing required metadata, have %s. Will delete message.", + message.id(), metadata); sendRejectionEmail(message, InboundEmailRejectionSender.Error.PARSING_ERROR); return; } @@ -168,11 +168,13 @@ public class MailProcessor { Set accountIds = emails.getAccountFor(metadata.author); if (accountIds.size() != 1) { - log.error( - "Address {} could not be matched to a unique account. It was matched to {}." - + " Will delete message.", - metadata.author, - accountIds); + logger + .atSevere() + .log( + "Address %s could not be matched to a unique account. It was matched to %s." + + " Will delete message.", + metadata.author, accountIds); + // We don't want to send an email if no accounts are linked to it. if (accountIds.size() > 1) { sendRejectionEmail(message, InboundEmailRejectionSender.Error.UNKNOWN_ACCOUNT); @@ -182,11 +184,11 @@ public class MailProcessor { Account.Id accountId = accountIds.iterator().next(); Optional accountState = accountCache.get(accountId); if (!accountState.isPresent()) { - log.warn("Mail: Account {} doesn't exist. Will delete message.", accountId); + logger.atWarning().log("Mail: Account %s doesn't exist. Will delete message.", accountId); return; } if (!accountState.get().getAccount().isActive()) { - log.warn(String.format("Mail: Account %s is inactive. Will delete message.", accountId)); + logger.atWarning().log("Mail: Account %s is inactive. Will delete message.", accountId); sendRejectionEmail(message, InboundEmailRejectionSender.Error.INACTIVE_ACCOUNT); return; } @@ -200,7 +202,7 @@ public class MailProcessor { emailRejectionSender.create(message.from(), message.id(), reason); em.send(); } catch (Exception e) { - log.error("Cannot send email to warn for an error", e); + logger.atSevere().withCause(e).log("Cannot send email to warn for an error"); } } @@ -211,19 +213,20 @@ public class MailProcessor { List changeDataList = queryProvider.get().byLegacyChangeId(new Change.Id(metadata.changeNumber)); if (changeDataList.size() != 1) { - log.error( - "Message {} references unique change {}, but there are {} matching changes in " - + "the index. Will delete message.", - message.id(), - metadata.changeNumber, - changeDataList.size()); + logger + .atSevere() + .log( + "Message %s references unique change %s," + + " but there are %d matching changes in the index." + + " Will delete message.", + message.id(), metadata.changeNumber, changeDataList.size()); sendRejectionEmail(message, InboundEmailRejectionSender.Error.INTERNAL_EXCEPTION); return; } ChangeData cd = changeDataList.get(0); if (existingMessageIds(cd).contains(message.id())) { - log.info("Message {} was already processed. Will delete message.", message.id()); + logger.atInfo().log("Message %s was already processed. Will delete message.", message.id()); return; } // Get all comments; filter and sort them to get the original list of @@ -246,7 +249,9 @@ public class MailProcessor { } if (parsedComments.isEmpty()) { - log.warn("Could not parse any comments from {}. Will delete message.", message.id()); + logger + .atWarning() + .log("Could not parse any comments from %s. Will delete message.", message.id()); sendRejectionEmail(message, InboundEmailRejectionSender.Error.PARSING_ERROR); return; } diff --git a/java/com/google/gerrit/server/mail/receive/MailReceiver.java b/java/com/google/gerrit/server/mail/receive/MailReceiver.java index 6deb240f7a..ebab65e1e9 100644 --- a/java/com/google/gerrit/server/mail/receive/MailReceiver.java +++ b/java/com/google/gerrit/server/mail/receive/MailReceiver.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.mail.receive; import com.google.common.annotations.VisibleForTesting; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.events.LifecycleListener; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.lifecycle.LifecycleModule; @@ -30,12 +31,10 @@ import java.util.Set; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.Future; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** MailReceiver implements base functionality for receiving emails. */ public abstract class MailReceiver implements LifecycleListener { - private static final Logger log = LoggerFactory.getLogger(MailReceiver.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); protected EmailSettings mailSettings; protected Set pendingDeletion; @@ -91,7 +90,7 @@ public abstract class MailReceiver implements LifecycleListener { try { MailReceiver.this.handleEmails(true); } catch (MailTransferException | IOException e) { - log.error("Error while fetching emails", e); + logger.atSevere().withCause(e).log("Error while fetching emails"); } } }, @@ -141,7 +140,10 @@ public abstract class MailReceiver implements LifecycleListener { mailProcessor.process(m); requestDeletion(m.id()); } catch (RestApiException | UpdateException e) { - log.error("Mail: Can't process message " + m.id() + " . Won't delete.", e); + logger + .atSevere() + .withCause(e) + .log("Mail: Can't process message %s . Won't delete.", m.id()); } }); } else { @@ -150,7 +152,7 @@ public abstract class MailReceiver implements LifecycleListener { mailProcessor.process(m); requestDeletion(m.id()); } catch (RestApiException | UpdateException e) { - log.error("Mail: Can't process messages. Won't delete.", e); + logger.atSevere().withCause(e).log("Mail: Can't process messages. Won't delete."); } } } diff --git a/java/com/google/gerrit/server/mail/receive/Pop3MailReceiver.java b/java/com/google/gerrit/server/mail/receive/Pop3MailReceiver.java index bbb7e6609a..a3ea265342 100644 --- a/java/com/google/gerrit/server/mail/receive/Pop3MailReceiver.java +++ b/java/com/google/gerrit/server/mail/receive/Pop3MailReceiver.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.mail.receive; +import com.google.common.flogger.FluentLogger; import com.google.common.primitives.Ints; import com.google.gerrit.server.git.WorkQueue; import com.google.gerrit.server.mail.EmailSettings; @@ -27,13 +28,11 @@ import java.util.List; import org.apache.commons.net.pop3.POP3Client; import org.apache.commons.net.pop3.POP3MessageInfo; import org.apache.commons.net.pop3.POP3SClient; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** An implementation of {@link MailReceiver} for POP3. */ @Singleton public class Pop3MailReceiver extends MailReceiver { - private static final Logger log = LoggerFactory.getLogger(Pop3MailReceiver.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); @Inject Pop3MailReceiver(EmailSettings mailSettings, MailProcessor mailProcessor, WorkQueue workQueue) { @@ -70,7 +69,7 @@ public class Pop3MailReceiver extends MailReceiver { if (messages == null) { throw new MailTransferException("Could not retrieve message list via POP3"); } - log.info("Received " + messages.length + " messages via POP3"); + logger.atInfo().log("Received %d messages via POP3", messages.length); // Fetch messages List mailMessages = new ArrayList<>(); for (POP3MessageInfo msginfo : messages) { @@ -93,14 +92,14 @@ public class Pop3MailReceiver extends MailReceiver { if (pop3.deleteMessage(msginfo.number)) { pendingDeletion.remove(mailMessage.id()); } else { - log.error("Could not delete message " + msginfo.number); + logger.atSevere().log("Could not delete message %d", msginfo.number); } } else { // Process message further mailMessages.add(mailMessage); } } catch (MailParsingException e) { - log.error("Could not parse message " + msginfo.number); + logger.atSevere().log("Could not parse message %d", msginfo.number); } } dispatchMailProcessor(mailMessages, async); diff --git a/java/com/google/gerrit/server/mail/send/ChangeEmail.java b/java/com/google/gerrit/server/mail/send/ChangeEmail.java index 11f50a95e9..503fbd0a1f 100644 --- a/java/com/google/gerrit/server/mail/send/ChangeEmail.java +++ b/java/com/google/gerrit/server/mail/send/ChangeEmail.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.mail.send; import com.google.common.base.Splitter; import com.google.common.collect.ListMultimap; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.errors.EmailException; import com.google.gerrit.extensions.api.changes.NotifyHandling; import com.google.gerrit.extensions.api.changes.RecipientType; @@ -62,12 +63,10 @@ import org.eclipse.jgit.internal.JGitText; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.util.RawParseUtils; import org.eclipse.jgit.util.TemporaryBuffer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Sends an email to one or more interested parties. */ public abstract class ChangeEmail extends NotificationEmail { - private static final Logger log = LoggerFactory.getLogger(ChangeEmail.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); protected static ChangeData newChangeData( EmailArguments ea, Project.NameKey project, Change.Id id) { @@ -300,7 +299,7 @@ public abstract class ChangeEmail extends NotificationEmail { } return detail.toString(); } catch (Exception err) { - log.warn("Cannot format change detail", err); + logger.atWarning().withCause(err).log("Cannot format change detail"); return ""; } } @@ -376,7 +375,7 @@ public abstract class ChangeEmail extends NotificationEmail { add(RecipientType.CC, id); } } catch (OrmException err) { - log.warn("Cannot CC users that reviewed updated change", err); + logger.atWarning().withCause(err).log("Cannot CC users that reviewed updated change"); } } @@ -391,7 +390,7 @@ public abstract class ChangeEmail extends NotificationEmail { add(RecipientType.CC, id); } } catch (OrmException err) { - log.warn("Cannot CC users that commented on updated change", err); + logger.atWarning().withCause(err).log("Cannot CC users that commented on updated change"); } } @@ -514,7 +513,7 @@ public abstract class ChangeEmail extends NotificationEmail { reviewers.add(getNameEmailFor(who)); } } catch (OrmException e) { - log.warn("Cannot get change reviewers", e); + logger.atWarning().withCause(e).log("Cannot get change reviewers"); } return reviewers; } @@ -536,10 +535,10 @@ public abstract class ChangeEmail extends NotificationEmail { return "[Octopus merge; cannot be formatted as a diff.]\n"; } } catch (PatchListObjectTooLargeException e) { - log.warn("Cannot format patch " + e.getMessage()); + logger.atWarning().log("Cannot format patch %s", e.getMessage()); return ""; } catch (PatchListNotAvailableException e) { - log.error("Cannot format patch", e); + logger.atSevere().withCause(e).log("Cannot format patch"); return ""; } @@ -556,11 +555,11 @@ public abstract class ChangeEmail extends NotificationEmail { if (JGitText.get().inMemoryBufferLimitExceeded.equals(e.getMessage())) { return ""; } - log.error("Cannot format patch", e); + logger.atSevere().withCause(e).log("Cannot format patch"); return ""; } } catch (IOException e) { - log.error("Cannot open repository to format patch", e); + logger.atSevere().withCause(e).log("Cannot open repository to format patch"); return ""; } } diff --git a/java/com/google/gerrit/server/mail/send/CommentSender.java b/java/com/google/gerrit/server/mail/send/CommentSender.java index bbff29f1f0..92722973d9 100644 --- a/java/com/google/gerrit/server/mail/send/CommentSender.java +++ b/java/com/google/gerrit/server/mail/send/CommentSender.java @@ -18,6 +18,7 @@ import static java.util.stream.Collectors.toList; import com.google.common.base.Strings; import com.google.common.collect.Ordering; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.FilenameComparator; import com.google.gerrit.common.errors.EmailException; import com.google.gerrit.common.errors.NoSuchEntityException; @@ -58,12 +59,10 @@ import java.util.Set; import org.apache.james.mime4j.dom.field.FieldName; import org.eclipse.jgit.lib.Config; import org.eclipse.jgit.lib.Repository; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Send comments, after the author of them hit used Publish Comments in the UI. */ public class CommentSender extends ReplyToChangeSender { - private static final Logger log = LoggerFactory.getLogger(CommentSender.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public interface Factory { CommentSender create(Project.NameKey project, Change.Id id); @@ -205,9 +204,9 @@ public class CommentSender extends ReplyToChangeSender { try { patchList = getPatchList(); } catch (PatchListObjectTooLargeException e) { - log.warn("Failed to get patch list: " + e.getMessage()); + logger.atWarning().log("Failed to get patch list: %s", e.getMessage()); } catch (PatchListNotAvailableException e) { - log.error("Failed to get patch list", e); + logger.atSevere().withCause(e).log("Failed to get patch list"); } } @@ -227,12 +226,12 @@ public class CommentSender extends ReplyToChangeSender { try { currentGroup.fileData = new PatchFile(repo, patchList, c.key.filename); } catch (IOException e) { - log.warn( - "Cannot load {} from {} in {}", - c.key.filename, - patchList.getNewId().name(), - projectState.getName(), - e); + logger + .atWarning() + .withCause(e) + .log( + "Cannot load %s from %s in %s", + c.key.filename, patchList.getNewId().name(), projectState.getName()); currentGroup.fileData = null; } } @@ -322,7 +321,7 @@ public class CommentSender extends ReplyToChangeSender { try { return commentsUtil.getPublished(args.db.get(), changeData.notes(), key); } catch (OrmException e) { - log.warn("Could not find the parent of this comment: {}", child.toString()); + logger.atWarning().log("Could not find the parent of this comment: %s", child); return Optional.empty(); } } @@ -540,16 +539,16 @@ public class CommentSender extends ReplyToChangeSender { return fileInfo.getLine(side, lineNbr); } catch (IOException err) { // Default to the empty string if the file cannot be safely read. - log.warn("Failed to read file on side {}", side, err); + logger.atWarning().withCause(err).log("Failed to read file on side %d", side); return ""; } catch (IndexOutOfBoundsException err) { // Default to the empty string if the given line number does not appear // in the file. - log.debug("Failed to get line number of file on side {}", side, err); + logger.atFine().withCause(err).log("Failed to get line number of file on side %d", side); return ""; } catch (NoSuchEntityException err) { // Default to the empty string if the side cannot be found. - log.warn("Side {} of file didn't exist", side, err); + logger.atWarning().withCause(err).log("Side %d of file didn't exist", side); return ""; } } diff --git a/java/com/google/gerrit/server/mail/send/CreateChangeSender.java b/java/com/google/gerrit/server/mail/send/CreateChangeSender.java index 156fde5b0a..fc9c14acdb 100644 --- a/java/com/google/gerrit/server/mail/send/CreateChangeSender.java +++ b/java/com/google/gerrit/server/mail/send/CreateChangeSender.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.mail.send; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.errors.EmailException; import com.google.gerrit.extensions.api.changes.RecipientType; import com.google.gerrit.reviewdb.client.Account; @@ -27,12 +28,10 @@ import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import com.google.inject.assistedinject.Assisted; import java.util.stream.StreamSupport; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Notify interested parties of a brand new change. */ public class CreateChangeSender extends NewChangeSender { - private static final Logger log = LoggerFactory.getLogger(CreateChangeSender.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public interface Factory { CreateChangeSender create(Project.NameKey project, Change.Id id); @@ -71,7 +70,7 @@ public class CreateChangeSender extends NewChangeSender { // Just don't CC everyone. Better to send a partial message to those // we already have queued up then to fail deliver entirely to people // who have a lower interest in the change. - log.warn("Cannot notify watchers for new change", err); + logger.atWarning().withCause(err).log("Cannot notify watchers for new change"); } includeWatchers(NotifyType.NEW_PATCHSETS, !change.isWorkInProgress() && !change.isPrivate()); diff --git a/java/com/google/gerrit/server/mail/send/NotificationEmail.java b/java/com/google/gerrit/server/mail/send/NotificationEmail.java index 2a24f38f2f..0cc7a1d86f 100644 --- a/java/com/google/gerrit/server/mail/send/NotificationEmail.java +++ b/java/com/google/gerrit/server/mail/send/NotificationEmail.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.mail.send; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.Iterables; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.errors.EmailException; import com.google.gerrit.extensions.api.changes.RecipientType; import com.google.gerrit.reviewdb.client.Account; @@ -27,12 +28,10 @@ import com.google.gerrit.server.mail.send.ProjectWatch.Watchers; import com.google.gwtorm.server.OrmException; import java.util.HashMap; import java.util.Map; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Common class for notifications that are related to a project and branch */ public abstract class NotificationEmail extends OutgoingEmail { - private static final Logger log = LoggerFactory.getLogger(NotificationEmail.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); protected Branch.NameKey branch; @@ -73,7 +72,7 @@ public abstract class NotificationEmail extends OutgoingEmail { // Just don't CC everyone. Better to send a partial message to those // we already have queued up then to fail deliver entirely to people // who have a lower interest in the change. - log.warn("Cannot BCC watchers for " + type, err); + logger.atWarning().withCause(err).log("Cannot BCC watchers for %s", type); } } diff --git a/java/com/google/gerrit/server/mail/send/OutgoingEmail.java b/java/com/google/gerrit/server/mail/send/OutgoingEmail.java index f1f1778297..a62a910dd9 100644 --- a/java/com/google/gerrit/server/mail/send/OutgoingEmail.java +++ b/java/com/google/gerrit/server/mail/send/OutgoingEmail.java @@ -20,6 +20,7 @@ import static com.google.gerrit.extensions.client.GeneralPreferencesInfo.EmailSt import com.google.common.collect.ImmutableListMultimap; import com.google.common.collect.ListMultimap; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.errors.EmailException; import com.google.gerrit.extensions.api.changes.NotifyHandling; import com.google.gerrit.extensions.api.changes.RecipientType; @@ -51,12 +52,10 @@ import java.util.Set; import java.util.StringJoiner; import org.apache.james.mime4j.dom.field.FieldName; import org.eclipse.jgit.util.SystemReader; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Sends an email to one or more interested parties. */ public abstract class OutgoingEmail { - private static final Logger log = LoggerFactory.getLogger(OutgoingEmail.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); protected String messageClass; private final Set rcptTo = new HashSet<>(); @@ -470,7 +469,7 @@ public abstract class OutgoingEmail { add(rt, toAddress(to), override); } } catch (PermissionBackendException e) { - log.error("Error reading database for account: " + to, e); + logger.atSevere().withCause(e).log("Error reading database for account: %s", to); } } @@ -491,9 +490,9 @@ public abstract class OutgoingEmail { protected void add(RecipientType rt, Address addr, boolean override) { if (addr != null && addr.getEmail() != null && addr.getEmail().length() > 0) { if (!args.validator.isValid(addr.getEmail())) { - log.warn("Not emailing " + addr.getEmail() + " (invalid email address)"); + logger.atWarning().log("Not emailing %s (invalid email address)", addr.getEmail()); } else if (!args.emailSender.canEmail(addr.getEmail())) { - log.warn("Not emailing " + addr.getEmail() + " (prohibited by allowrcpt)"); + logger.atWarning().log("Not emailing %s (prohibited by allowrcpt)", addr.getEmail()); } else { if (!smtpRcptTo.add(addr)) { if (!override) { diff --git a/java/com/google/gerrit/server/mail/send/OutgoingEmailValidator.java b/java/com/google/gerrit/server/mail/send/OutgoingEmailValidator.java index 1a4d39bce7..bc6c89ebb6 100644 --- a/java/com/google/gerrit/server/mail/send/OutgoingEmailValidator.java +++ b/java/com/google/gerrit/server/mail/send/OutgoingEmailValidator.java @@ -16,18 +16,17 @@ package com.google.gerrit.server.mail.send; import static org.apache.commons.validator.routines.DomainValidator.ArrayType.GENERIC_PLUS; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.server.config.GerritServerConfig; import com.google.inject.Inject; import com.google.inject.Singleton; import org.apache.commons.validator.routines.DomainValidator; import org.apache.commons.validator.routines.EmailValidator; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class OutgoingEmailValidator { - private static final Logger log = LoggerFactory.getLogger(OutgoingEmailValidator.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); @Inject OutgoingEmailValidator(@GerritServerConfig Config config) { @@ -38,7 +37,7 @@ public class OutgoingEmailValidator { } catch (IllegalStateException e) { // Should only happen in tests, where the OutgoingEmailValidator // is instantiated repeatedly. - log.error("Failed to update TLD override: " + e.getMessage()); + logger.atSevere().log("Failed to update TLD override: %s", e.getMessage()); } } } diff --git a/java/com/google/gerrit/server/mail/send/ProjectWatch.java b/java/com/google/gerrit/server/mail/send/ProjectWatch.java index 5b361f1efd..8f6e72df4a 100644 --- a/java/com/google/gerrit/server/mail/send/ProjectWatch.java +++ b/java/com/google/gerrit/server/mail/send/ProjectWatch.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.mail.send; import com.google.common.base.Strings; import com.google.common.collect.ImmutableSet; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.GroupDescription; import com.google.gerrit.common.data.GroupReference; import com.google.gerrit.index.query.Predicate; @@ -40,11 +41,9 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class ProjectWatch { - private static final Logger log = LoggerFactory.getLogger(ProjectWatch.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); protected final EmailArguments args; protected final ProjectState projectState; @@ -102,12 +101,11 @@ public class ProjectWatch { try { add(matching, nc); } catch (QueryParseException e) { - log.warn( - "Project {} has invalid notify {} filter \"{}\": {}", - state.getName(), - nc.getName(), - nc.getFilter(), - e.getMessage()); + logger + .atWarning() + .log( + "Project %s has invalid notify %s filter \"%s\": %s", + state.getName(), nc.getName(), nc.getFilter(), e.getMessage()); } } } diff --git a/java/com/google/gerrit/server/mime/DefaultFileExtensionRegistry.java b/java/com/google/gerrit/server/mime/DefaultFileExtensionRegistry.java index 7f0661cf5e..1814e54d72 100644 --- a/java/com/google/gerrit/server/mime/DefaultFileExtensionRegistry.java +++ b/java/com/google/gerrit/server/mime/DefaultFileExtensionRegistry.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.mime; import com.google.common.collect.ImmutableMap; +import com.google.common.flogger.FluentLogger; import eu.medsea.mimeutil.MimeException; import eu.medsea.mimeutil.MimeType; import eu.medsea.mimeutil.MimeUtil; @@ -27,12 +28,11 @@ import java.util.Collection; import java.util.Collections; import java.util.Map; import java.util.Properties; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Loads mime types from {@code mime-types.properties} at specificity of 2. */ public class DefaultFileExtensionRegistry extends MimeDetector { - private static final Logger log = LoggerFactory.getLogger(DefaultFileExtensionRegistry.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + private static final ImmutableMap TYPES; static { @@ -41,7 +41,7 @@ public class DefaultFileExtensionRegistry extends MimeDetector { DefaultFileExtensionRegistry.class.getResourceAsStream("mime-types.properties")) { prop.load(in); } catch (IOException e) { - log.warn("Cannot load mime-types.properties", e); + logger.atWarning().withCause(e).log("Cannot load mime-types.properties"); } ImmutableMap.Builder b = ImmutableMap.builder(); diff --git a/java/com/google/gerrit/server/mime/MimeUtilFileTypeRegistry.java b/java/com/google/gerrit/server/mime/MimeUtilFileTypeRegistry.java index 7cb34e2a9e..eecf935a69 100644 --- a/java/com/google/gerrit/server/mime/MimeUtilFileTypeRegistry.java +++ b/java/com/google/gerrit/server/mime/MimeUtilFileTypeRegistry.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.mime; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.server.config.GerritServerConfig; import com.google.inject.Inject; import com.google.inject.Singleton; @@ -29,14 +30,13 @@ import java.util.HashSet; import java.util.List; import java.util.Set; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class MimeUtilFileTypeRegistry implements FileTypeRegistry { + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + private static final String KEY_SAFE = "safe"; private static final String SECTION_MIMETYPE = "mimetype"; - private static final Logger log = LoggerFactory.getLogger(MimeUtilFileTypeRegistry.class); private final Config cfg; private final MimeUtil2 mimeUtil; @@ -85,7 +85,7 @@ public class MimeUtilFileTypeRegistry implements FileTypeRegistry { try { mimeTypes.addAll(mimeUtil.getMimeTypes(content)); } catch (MimeException e) { - log.warn("Unable to determine MIME type from content", e); + logger.atWarning().withCause(e).log("Unable to determine MIME type from content"); } } return getMimeType(mimeTypes, path); @@ -98,7 +98,7 @@ public class MimeUtilFileTypeRegistry implements FileTypeRegistry { try { mimeTypes.addAll(mimeUtil.getMimeTypes(is)); } catch (MimeException e) { - log.warn("Unable to determine MIME type from content", e); + logger.atWarning().withCause(e).log("Unable to determine MIME type from content"); } return getMimeType(mimeTypes, path); } @@ -108,7 +108,7 @@ public class MimeUtilFileTypeRegistry implements FileTypeRegistry { try { mimeTypes.addAll(mimeUtil.getMimeTypes(path)); } catch (MimeException e) { - log.warn("Unable to determine MIME type from path", e); + logger.atWarning().withCause(e).log("Unable to determine MIME type from path"); } if (isUnknownType(mimeTypes)) { diff --git a/java/com/google/gerrit/server/notedb/ChangeNotes.java b/java/com/google/gerrit/server/notedb/ChangeNotes.java index 99868a413f..874ee45a14 100644 --- a/java/com/google/gerrit/server/notedb/ChangeNotes.java +++ b/java/com/google/gerrit/server/notedb/ChangeNotes.java @@ -36,6 +36,7 @@ import com.google.common.collect.Ordering; import com.google.common.collect.Sets; import com.google.common.collect.Sets.SetView; import com.google.common.collect.Streams; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.common.data.SubmitRecord; import com.google.gerrit.metrics.Timer1; @@ -83,12 +84,10 @@ import org.eclipse.jgit.errors.ConfigInvalidException; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Repository; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** View of a single {@link Change} based on the log of its notes branch. */ public class ChangeNotes extends AbstractChangeNotes { - private static final Logger log = LoggerFactory.getLogger(ChangeNotes.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); static final Ordering PSA_BY_TIME = Ordering.from(comparing(PatchSetApproval::getGranted)); @@ -148,7 +147,7 @@ public class ChangeNotes extends AbstractChangeNotes { throw new NoSuchChangeException(changeId); } if (changes.size() != 1) { - log.error("Multiple changes found for {}", changeId.get()); + logger.atSevere().log("Multiple changes found for %d", changeId.get()); throw new NoSuchChangeException(changeId); } return changes.get(0).notes(); @@ -365,20 +364,22 @@ public class ChangeNotes extends AbstractChangeNotes { if (defaultStorage == PrimaryStorage.REVIEW_DB) { // If changes should exist in ReviewDb, it's worth warning about a meta ref with // no corresponding ReviewDb data. - log.warn("skipping change {} found in project {} but not in ReviewDb", id, project); + logger + .atWarning() + .log("skipping change %s found in project %s but not in ReviewDb", id, project); return null; } // TODO(dborowitz): See discussion in NoteDbBatchUpdate#newChangeContext. change = ChangeNotes.Factory.newNoteDbOnlyChange(project, id); } else if (!change.getProject().equals(project)) { - log.error( - "skipping change {} found in project {} because ReviewDb change has" + " project {}", - id, - project, - change.getProject()); + logger + .atSevere() + .log( + "skipping change %s found in project %s because ReviewDb change has project %s", + id, project, change.getProject()); return null; } - log.debug("adding change {} found in project {}", id, project); + logger.atFine().log("adding change %s found in project %s", id, project); return toResult(change); } @@ -761,7 +762,7 @@ public class ChangeNotes extends AbstractChangeNotes { // // Parse notes from the staged result so we can return something useful // to the caller instead of throwing. - log.debug("Rebuilding change {} failed: {}", getChangeId(), e.getMessage()); + logger.atFine().log("Rebuilding change %s failed: %s", getChangeId(), e.getMessage()); args.metrics.autoRebuildFailureCount.increment(CHANGES); rebuildResult = checkNotNull(r); checkNotNull(r.newState()); @@ -778,11 +779,13 @@ public class ChangeNotes extends AbstractChangeNotes { } catch (OrmException e) { throw new IOException(e); } finally { - log.debug( - "Rebuilt change {} in project {} in {} ms", - getChangeId(), - getProjectName(), - TimeUnit.MILLISECONDS.convert(timer.stop(), TimeUnit.NANOSECONDS)); + logger + .atFine() + .log( + "Rebuilt change %s in project %s in %s ms", + getChangeId(), + getProjectName(), + TimeUnit.MILLISECONDS.convert(timer.stop(), TimeUnit.NANOSECONDS)); } } } diff --git a/java/com/google/gerrit/server/notedb/ChangeNotesParser.java b/java/com/google/gerrit/server/notedb/ChangeNotesParser.java index 689b024d90..a5059291b7 100644 --- a/java/com/google/gerrit/server/notedb/ChangeNotesParser.java +++ b/java/com/google/gerrit/server/notedb/ChangeNotesParser.java @@ -51,6 +51,7 @@ import com.google.common.collect.MultimapBuilder; import com.google.common.collect.Sets; import com.google.common.collect.Table; import com.google.common.collect.Tables; +import com.google.common.flogger.FluentLogger; import com.google.common.primitives.Ints; import com.google.gerrit.common.data.LabelType; import com.google.gerrit.common.data.SubmitRecord; @@ -100,11 +101,9 @@ import org.eclipse.jgit.notes.NoteMap; import org.eclipse.jgit.revwalk.FooterKey; import org.eclipse.jgit.util.GitDateParser; import org.eclipse.jgit.util.RawParseUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; class ChangeNotesParser { - private static final Logger log = LoggerFactory.getLogger(ChangeNotesParser.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); // Sentinel RevId indicating a mutable field on a patch set was parsed, but // the parser does not yet know its commit SHA-1. @@ -1092,7 +1091,9 @@ class ChangeNotesParser { approvals.values(), PatchSetApproval::getPatchSetId, missing); if (!missing.isEmpty()) { - log.warn("ignoring {} additional entities due to missing patch sets: {}", pruned, missing); + logger + .atWarning() + .log("ignoring %s additional entities due to missing patch sets: %s", pruned, missing); } } diff --git a/java/com/google/gerrit/server/notedb/DraftCommentNotes.java b/java/com/google/gerrit/server/notedb/DraftCommentNotes.java index f66665c8a7..487fee3451 100644 --- a/java/com/google/gerrit/server/notedb/DraftCommentNotes.java +++ b/java/com/google/gerrit/server/notedb/DraftCommentNotes.java @@ -23,6 +23,7 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableListMultimap; import com.google.common.collect.ListMultimap; import com.google.common.collect.MultimapBuilder; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.metrics.Timer1; import com.google.gerrit.reviewdb.client.Account; @@ -50,12 +51,10 @@ import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.notes.NoteMap; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.transport.ReceiveCommand; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** View of the draft comments for a single {@link Change} based on the log of its drafts branch. */ public class DraftCommentNotes extends AbstractChangeNotes { - private static final Logger log = LoggerFactory.getLogger(DraftCommentNotes.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public interface Factory { DraftCommentNotes create(Change change, Account.Id accountId); @@ -225,7 +224,9 @@ public class DraftCommentNotes extends AbstractChangeNotes { repo.scanForRepoChanges(); } catch (OrmException | IOException e) { // See ChangeNotes#rebuildAndOpen. - log.debug("Rebuilding change {} via drafts failed: {}", getChangeId(), e.getMessage()); + logger + .atFine() + .log("Rebuilding change %s via drafts failed: %s", getChangeId(), e.getMessage()); args.metrics.autoRebuildFailureCount.increment(CHANGES); checkNotNull(r.staged()); return LoadHandle.create( @@ -238,11 +239,13 @@ public class DraftCommentNotes extends AbstractChangeNotes { } catch (OrmException e) { throw new IOException(e); } finally { - log.debug( - "Rebuilt change {} in {} in {} ms via drafts", - getChangeId(), - change != null ? "project " + change.getProject() : "unknown project", - TimeUnit.MILLISECONDS.convert(timer.stop(), TimeUnit.NANOSECONDS)); + logger + .atFine() + .log( + "Rebuilt change %s in %s in %s ms via drafts", + getChangeId(), + change != null ? "project " + change.getProject() : "unknown project", + TimeUnit.MILLISECONDS.convert(timer.stop(), TimeUnit.NANOSECONDS)); } } diff --git a/java/com/google/gerrit/server/notedb/PrimaryStorageMigrator.java b/java/com/google/gerrit/server/notedb/PrimaryStorageMigrator.java index 69cc2ebff5..18c5752169 100644 --- a/java/com/google/gerrit/server/notedb/PrimaryStorageMigrator.java +++ b/java/com/google/gerrit/server/notedb/PrimaryStorageMigrator.java @@ -27,6 +27,7 @@ import com.github.rholder.retry.WaitStrategies; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Stopwatch; import com.google.common.collect.ImmutableMap; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.common.TimeUtil; import com.google.gerrit.extensions.restapi.RestApiException; @@ -72,13 +73,11 @@ import org.eclipse.jgit.lib.Config; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Repository; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Helper to migrate the {@link PrimaryStorage} of individual changes. */ @Singleton public class PrimaryStorageMigrator { - private static final Logger log = LoggerFactory.getLogger(PrimaryStorageMigrator.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); /** * Exception thrown during migration if the change has no {@code noteDbState} field at the @@ -277,7 +276,9 @@ public class PrimaryStorageMigrator { // the primary storage to NoteDb. setPrimaryStorageNoteDb(id, rebuiltState); - log.debug("Migrated change {} to NoteDb primary in {}ms", id, sw.elapsed(MILLISECONDS)); + logger + .atFine() + .log("Migrated change %s to NoteDb primary in %sms", id, sw.elapsed(MILLISECONDS)); } private Change setReadOnlyInReviewDb(Change.Id id) throws OrmException { @@ -413,7 +414,9 @@ public class PrimaryStorageMigrator { rebuilder.rebuildReviewDb(db(), project, id); setPrimaryStorageReviewDb(id, newMetaId); releaseReadOnlyLeaseInNoteDb(project, id); - log.debug("Migrated change {} to ReviewDb primary in {}ms", id, sw.elapsed(MILLISECONDS)); + logger + .atFine() + .log("Migrated change %s to ReviewDb primary in %sms", id, sw.elapsed(MILLISECONDS)); } private ObjectId setReadOnlyInNoteDb(Project.NameKey project, Change.Id id) diff --git a/java/com/google/gerrit/server/notedb/rebuild/CommentEvent.java b/java/com/google/gerrit/server/notedb/rebuild/CommentEvent.java index 1fffab44b3..5514ed11ef 100644 --- a/java/com/google/gerrit/server/notedb/rebuild/CommentEvent.java +++ b/java/com/google/gerrit/server/notedb/rebuild/CommentEvent.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.notedb.rebuild; import static com.google.gerrit.server.CommentsUtil.setCommentRevId; import com.google.common.base.MoreObjects.ToStringHelper; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.Comment; import com.google.gerrit.reviewdb.client.PatchLineComment; @@ -25,11 +26,9 @@ import com.google.gerrit.server.CommentsUtil; import com.google.gerrit.server.notedb.ChangeUpdate; import com.google.gerrit.server.patch.PatchListCache; import com.google.gerrit.server.patch.PatchListNotAvailableException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; class CommentEvent extends Event { - private static final Logger log = LoggerFactory.getLogger(CommentEvent.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public final Comment c; private final Change change; @@ -67,11 +66,11 @@ class CommentEvent extends Event { try { setCommentRevId(c, cache, change, ps); } catch (PatchListNotAvailableException e) { - log.warn( - "Unable to determine parent commit of patch set {} ({}); omitting inline comment {}", - ps.getId(), - ps.getRevision(), - c); + logger + .atWarning() + .log( + "Unable to determine parent commit of patch set %s (%s); omitting inline comment %s", + ps.getId(), ps.getRevision(), c); return; } } diff --git a/java/com/google/gerrit/server/notedb/rebuild/DraftCommentEvent.java b/java/com/google/gerrit/server/notedb/rebuild/DraftCommentEvent.java index 3bc3a58ab6..caa43938eb 100644 --- a/java/com/google/gerrit/server/notedb/rebuild/DraftCommentEvent.java +++ b/java/com/google/gerrit/server/notedb/rebuild/DraftCommentEvent.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.notedb.rebuild; import static com.google.gerrit.server.CommentsUtil.setCommentRevId; import com.google.common.base.MoreObjects.ToStringHelper; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.Comment; import com.google.gerrit.reviewdb.client.PatchSet; @@ -25,11 +26,9 @@ import com.google.gerrit.server.notedb.ChangeDraftUpdate; import com.google.gerrit.server.notedb.ChangeUpdate; import com.google.gerrit.server.patch.PatchListCache; import com.google.gerrit.server.patch.PatchListNotAvailableException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; class DraftCommentEvent extends Event { - private static final Logger log = LoggerFactory.getLogger(DraftCommentEvent.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public final Comment c; private final Change change; @@ -65,11 +64,12 @@ class DraftCommentEvent extends Event { try { setCommentRevId(c, cache, change, ps); } catch (PatchListNotAvailableException e) { - log.warn( - "Unable to determine parent commit of patch set {} ({}); omitting draft inline comment", - ps.getId(), - ps.getRevision(), - c); + logger + .atWarning() + .log( + "Unable to determine parent commit of patch set %s (%s);" + + " omitting draft inline comment %s", + ps.getId(), ps.getRevision(), c); return; } } diff --git a/java/com/google/gerrit/server/notedb/rebuild/GcAllUsers.java b/java/com/google/gerrit/server/notedb/rebuild/GcAllUsers.java index 6480e6734a..6544b23b11 100644 --- a/java/com/google/gerrit/server/notedb/rebuild/GcAllUsers.java +++ b/java/com/google/gerrit/server/notedb/rebuild/GcAllUsers.java @@ -20,6 +20,7 @@ import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_AUTO; import com.google.common.base.Throwables; import com.google.common.collect.ImmutableList; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.common.data.GarbageCollectionResult; import com.google.gerrit.server.config.AllUsersName; @@ -32,12 +33,10 @@ import java.io.IOException; import java.io.PrintWriter; import java.util.function.Consumer; import org.eclipse.jgit.lib.Repository; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class GcAllUsers { - private static final Logger log = LoggerFactory.getLogger(GcAllUsers.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final AllUsersName allUsers; private final GarbageCollection.Factory gcFactory; @@ -55,7 +54,7 @@ public class GcAllUsers { public void runWithLogger() { // Print log messages using logger, and skip progress. - run(log::info, null); + run(s -> logger.atInfo().log(s), null); } public void run(PrintWriter writer) { diff --git a/java/com/google/gerrit/server/notedb/rebuild/NoteDbMigrator.java b/java/com/google/gerrit/server/notedb/rebuild/NoteDbMigrator.java index 59fdde7725..81d8935ac2 100644 --- a/java/com/google/gerrit/server/notedb/rebuild/NoteDbMigrator.java +++ b/java/com/google/gerrit/server/notedb/rebuild/NoteDbMigrator.java @@ -38,6 +38,7 @@ import com.google.common.collect.MultimapBuilder; import com.google.common.collect.Ordering; import com.google.common.collect.SetMultimap; import com.google.common.collect.Streams; +import com.google.common.flogger.FluentLogger; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListeningExecutorService; @@ -109,12 +110,10 @@ import org.eclipse.jgit.storage.file.FileBasedConfig; import org.eclipse.jgit.transport.ReceiveCommand; import org.eclipse.jgit.util.FS; import org.eclipse.jgit.util.io.NullOutputStream; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** One stop shop for migrating a site's change storage from ReviewDb to NoteDb. */ public class NoteDbMigrator implements AutoCloseable { - private static final Logger log = LoggerFactory.getLogger(NoteDbMigrator.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final String AUTO_MIGRATE = "autoMigrate"; private static final String TRIAL = "trial"; @@ -595,7 +594,7 @@ public class NoteDbMigrator implements AutoCloseable { prev = saveState(prev, READ_WRITE_WITH_SEQUENCE_NOTE_DB_PRIMARY); Stopwatch sw = Stopwatch.createStarted(); - log.info("Setting primary storage to NoteDb"); + logger.atInfo().log("Setting primary storage to NoteDb"); List allChanges; try (ReviewDb db = unwrapDb(schemaFactory.open())) { allChanges = Streams.stream(db.changes().all()).map(Change::getId).collect(toList()); @@ -615,18 +614,23 @@ public class NoteDbMigrator implements AutoCloseable { } catch (NoNoteDbStateException e) { if (canSkipPrimaryStorageMigration( ctx.getReviewDbProvider().get(), id)) { - log.warn( - "Change {} previously failed to rebuild;" - + " skipping primary storage migration", - id, - e); + logger + .atWarning() + .withCause(e) + .log( + "Change %s previously failed to rebuild;" + + " skipping primary storage migration", + id); } else { throw e; } } return true; } catch (Exception e) { - log.error("Error migrating primary storage for " + id, e); + logger + .atSevere() + .withCause(e) + .log("Error migrating primary storage for %s", id); return false; } })) @@ -634,10 +638,11 @@ public class NoteDbMigrator implements AutoCloseable { boolean ok = futuresToBoolean(futures, "Error migrating primary storage"); double t = sw.elapsed(TimeUnit.MILLISECONDS) / 1000d; - log.info( - String.format( + logger + .atInfo() + .log( "Migrated primary storage of %d changes in %.01fs (%.01f/s)\n", - allChanges.size(), t, allChanges.size() / t)); + allChanges.size(), t, allChanges.size() / t); if (!ok) { throw new MigrationException("Migrating primary storage for some changes failed, see log"); } @@ -673,7 +678,10 @@ public class NoteDbMigrator implements AutoCloseable { try { return Iterables.isEmpty(unwrapDb(db).patchSets().byChange(id)); } catch (Exception e) { - log.error("Error checking if change " + id + " can be skipped, assuming no", e); + logger + .atSevere() + .withCause(e) + .log("Error checking if change %s can be skipped, assuming no", id); return false; } } @@ -688,7 +696,10 @@ public class NoteDbMigrator implements AutoCloseable { noteDbConfig.load(); return NotesMigrationState.forConfig(noteDbConfig); } catch (ConfigInvalidException | IllegalArgumentException e) { - log.warn("error reading NoteDb migration options from " + noteDbConfig.getFile(), e); + logger + .atWarning() + .withCause(e) + .log("error reading NoteDb migration options from %s", noteDbConfig.getFile()); return Optional.empty(); } } @@ -728,7 +739,7 @@ public class NoteDbMigrator implements AutoCloseable { // Only set in-memory state once it's been persisted to storage. globalNotesMigration.setFrom(newState); - log.info("Migration state: {} => {}", expectedOldState, newState); + logger.atInfo().log("Migration state: %s => %s", expectedOldState, newState); return newState; } @@ -759,7 +770,7 @@ public class NoteDbMigrator implements AutoCloseable { throw new MigrationException("Cannot rebuild without noteDb.changes.write=true"); } Stopwatch sw = Stopwatch.createStarted(); - log.info("Rebuilding changes in NoteDb"); + logger.atInfo().log("Rebuilding changes in NoteDb"); ImmutableListMultimap changesByProject = getChangesByProject(); List> futures = new ArrayList<>(); @@ -773,7 +784,7 @@ public class NoteDbMigrator implements AutoCloseable { try { return rebuildProject(contextHelper.getReviewDb(), changesByProject, project); } catch (Exception e) { - log.error("Error rebuilding project " + project, e); + logger.atSevere().withCause(e).log("Error rebuilding project %s", project); return false; } }); @@ -782,10 +793,11 @@ public class NoteDbMigrator implements AutoCloseable { boolean ok = futuresToBoolean(futures, "Error rebuilding projects"); double t = sw.elapsed(TimeUnit.MILLISECONDS) / 1000d; - log.info( - String.format( + logger + .atInfo() + .log( "Rebuilt %d changes in %.01fs (%.01f/s)\n", - changesByProject.size(), t, changesByProject.size() / t)); + changesByProject.size(), t, changesByProject.size() / t); if (!ok) { throw new MigrationException("Rebuilding some changes failed, see log"); } @@ -893,14 +905,16 @@ public class NoteDbMigrator implements AutoCloseable { toSave++; } catch (NoPatchSetsException e) { - log.warn(e.getMessage()); + logger.atWarning().log(e.getMessage()); } catch (ConflictingUpdateException ex) { - log.warn( - "Rebuilding detected a conflicting ReviewDb update for change {};" - + " will be auto-rebuilt at runtime", - changeId); + logger + .atWarning() + .log( + "Rebuilding detected a conflicting ReviewDb update for change %s;" + + " will be auto-rebuilt at runtime", + changeId); } catch (Throwable t) { - log.error("Failed to rebuild change " + changeId, t); + logger.atSevere().withCause(t).log("Failed to rebuild change %s", changeId); ok = false; } pm.update(1); @@ -918,19 +932,21 @@ public class NoteDbMigrator implements AutoCloseable { // to specify the repo name in the task text. pm.update(toSave); } catch (LockFailureException e) { - log.warn( - "Rebuilding detected a conflicting NoteDb update for the following refs, which will" - + " be auto-rebuilt at runtime: {}", - e.getFailedRefs().stream().distinct().sorted().collect(joining(", "))); + logger + .atWarning() + .log( + "Rebuilding detected a conflicting NoteDb update for the following refs, which will" + + " be auto-rebuilt at runtime: %s", + e.getFailedRefs().stream().distinct().sorted().collect(joining(", "))); } catch (IOException e) { - log.error("Failed to save NoteDb state for " + project, e); + logger.atSevere().withCause(e).log("Failed to save NoteDb state for %s", project); } finally { pm.endTask(); } } catch (RepositoryNotFoundException e) { - log.warn("Repository {} not found", project); + logger.atWarning().log("Repository %s not found", project); } catch (IOException e) { - log.error("Failed to rebuild project " + project, e); + logger.atSevere().withCause(e).log("Failed to rebuild project %s", project); } return ok; } @@ -977,7 +993,7 @@ public class NoteDbMigrator implements AutoCloseable { try { return Futures.allAsList(futures).get().stream().allMatch(b -> b); } catch (InterruptedException | ExecutionException e) { - log.error(errMsg, e); + logger.atSevere().withCause(e).log(errMsg); return false; } } diff --git a/java/com/google/gerrit/server/notedb/rebuild/OnlineNoteDbMigrator.java b/java/com/google/gerrit/server/notedb/rebuild/OnlineNoteDbMigrator.java index 65755ed14f..72c0441bea 100644 --- a/java/com/google/gerrit/server/notedb/rebuild/OnlineNoteDbMigrator.java +++ b/java/com/google/gerrit/server/notedb/rebuild/OnlineNoteDbMigrator.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.notedb.rebuild; import com.google.common.base.Stopwatch; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.events.LifecycleListener; import com.google.gerrit.lifecycle.LifecycleModule; import com.google.gerrit.server.config.GerritServerConfig; @@ -27,12 +28,10 @@ import com.google.inject.name.Named; import com.google.inject.name.Names; import java.util.concurrent.TimeUnit; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class OnlineNoteDbMigrator implements LifecycleListener { - private static final Logger log = LoggerFactory.getLogger(OnlineNoteDbMigrator.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final String TRIAL = "OnlineNoteDbMigrator/trial"; @@ -79,9 +78,11 @@ public class OnlineNoteDbMigrator implements LifecycleListener { } private void migrate() { - log.info("Starting online NoteDb migration"); + logger.atInfo().log("Starting online NoteDb migration"); if (upgradeIndex) { - log.info("Online index schema upgrades will be deferred until NoteDb migration is complete"); + logger + .atInfo() + .log("Online index schema upgrades will be deferred until NoteDb migration is complete"); } Stopwatch sw = Stopwatch.createStarted(); // TODO(dborowitz): Tune threads, maybe expose a progress monitor somewhere. @@ -89,13 +90,13 @@ public class OnlineNoteDbMigrator implements LifecycleListener { migratorBuilderProvider.get().setAutoMigrate(true).setTrialMode(trial).build()) { migrator.migrate(); } catch (Exception e) { - log.error("Error in online NoteDb migration", e); + logger.atSevere().withCause(e).log("Error in online NoteDb migration"); } gcAllUsers.runWithLogger(); - log.info("Online NoteDb migration completed in {}s", sw.elapsed(TimeUnit.SECONDS)); + logger.atInfo().log("Online NoteDb migration completed in %ss", sw.elapsed(TimeUnit.SECONDS)); if (upgradeIndex) { - log.info("Starting deferred index schema upgrades"); + logger.atInfo().log("Starting deferred index schema upgrades"); indexUpgrader.start(); } } diff --git a/java/com/google/gerrit/server/patch/AutoMerger.java b/java/com/google/gerrit/server/patch/AutoMerger.java index e4c207b3c7..f1b6639e79 100644 --- a/java/com/google/gerrit/server/patch/AutoMerger.java +++ b/java/com/google/gerrit/server/patch/AutoMerger.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.patch; import static com.google.common.base.Preconditions.checkArgument; import static java.nio.charset.StandardCharsets.UTF_8; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.reviewdb.client.RefNames; import com.google.gerrit.server.GerritPersonIdent; @@ -49,11 +50,9 @@ import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevObject; import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.util.TemporaryBuffer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class AutoMerger { - private static final Logger log = LoggerFactory.getLogger(AutoMerger.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static boolean cacheAutomerge(Config cfg) { return cfg.getBoolean("change", null, "cacheAutomerge", true); @@ -119,7 +118,7 @@ public class AutoMerger { // an exception most likely means that the merge tree was not created // and m.getMergeResults() is empty. This would mean that all paths are // unmerged and Gerrit UI would show all paths in the patch list. - log.warn("Error attempting automerge " + refName, e); + logger.atWarning().withCause(e).log("Error attempting automerge %s", refName); return null; } diff --git a/java/com/google/gerrit/server/patch/IntraLineLoader.java b/java/com/google/gerrit/server/patch/IntraLineLoader.java index f17f0b6856..e405b182de 100644 --- a/java/com/google/gerrit/server/patch/IntraLineLoader.java +++ b/java/com/google/gerrit/server/patch/IntraLineLoader.java @@ -18,6 +18,7 @@ package com.google.gerrit.server.patch; import com.google.common.base.Throwables; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.server.config.ConfigUtil; import com.google.gerrit.server.config.GerritServerConfig; import com.google.inject.Inject; @@ -35,11 +36,9 @@ import org.eclipse.jgit.diff.Edit; import org.eclipse.jgit.diff.MyersDiff; import org.eclipse.jgit.diff.ReplaceEdit; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; class IntraLineLoader implements Callable { - static final Logger log = LoggerFactory.getLogger(IntraLineLoader.class); + static final FluentLogger logger = FluentLogger.forEnclosingClass(); interface Factory { IntraLineLoader create(IntraLineDiffKey key, IntraLineDiffArgs args); @@ -84,19 +83,17 @@ class IntraLineLoader implements Callable { try { return result.get(timeoutMillis, TimeUnit.MILLISECONDS); } catch (InterruptedException | TimeoutException e) { - log.warn( - timeoutMillis - + " ms timeout reached for IntraLineDiff" - + " in project " - + args.project() - + " on commit " - + args.commit().name() - + " for path " - + args.path() - + " comparing " - + key.getBlobA().name() - + ".." - + key.getBlobB().name()); + logger + .atWarning() + .log( + "%s ms timeout reached for IntraLineDiff" + + " in project %s on commit %s for path %s comparing %s..%s", + timeoutMillis, + args.project(), + args.commit().name(), + args.path(), + key.getBlobA().name(), + key.getBlobB().name()); result.cancel(true); return new IntraLineDiff(IntraLineDiff.Status.TIMEOUT); } catch (ExecutionException e) { diff --git a/java/com/google/gerrit/server/patch/PatchListCacheImpl.java b/java/com/google/gerrit/server/patch/PatchListCacheImpl.java index 01c8b4180f..6039fff793 100644 --- a/java/com/google/gerrit/server/patch/PatchListCacheImpl.java +++ b/java/com/google/gerrit/server/patch/PatchListCacheImpl.java @@ -106,14 +106,14 @@ public class PatchListCacheImpl implements PatchListCache { } return pl; } catch (ExecutionException e) { - PatchListLoader.log.warn("Error computing " + key, e); + PatchListLoader.logger.atWarning().withCause(e).log("Error computing %s", key); throw new PatchListNotAvailableException(e); } catch (UncheckedExecutionException e) { if (e.getCause() instanceof LargeObjectException) { // Cache negative result so we don't need to redo expensive computations that would yield // the same result. fileCache.put(key, new LargeObjectTombstone()); - PatchListLoader.log.warn("Error computing " + key, e); + PatchListLoader.logger.atWarning().withCause(e).log("Error computing %s", key); throw new PatchListNotAvailableException(e); } throw e; @@ -151,7 +151,7 @@ public class PatchListCacheImpl implements PatchListCache { try { return intraCache.get(key, intraLoaderFactory.create(key, args)); } catch (ExecutionException | LargeObjectException e) { - IntraLineLoader.log.warn("Error computing " + key, e); + IntraLineLoader.logger.atWarning().withCause(e).log("Error computing %s", key); return new IntraLineDiff(IntraLineDiff.Status.ERROR); } } @@ -164,11 +164,11 @@ public class PatchListCacheImpl implements PatchListCache { try { return diffSummaryCache.get(key, diffSummaryLoaderFactory.create(key, project)); } catch (ExecutionException e) { - PatchListLoader.log.warn("Error computing " + key, e); + PatchListLoader.logger.atWarning().withCause(e).log("Error computing %s", key); throw new PatchListNotAvailableException(e); } catch (UncheckedExecutionException e) { if (e.getCause() instanceof LargeObjectException) { - PatchListLoader.log.warn("Error computing " + key, e); + PatchListLoader.logger.atWarning().withCause(e).log("Error computing %s", key); throw new PatchListNotAvailableException(e); } throw e; diff --git a/java/com/google/gerrit/server/patch/PatchListLoader.java b/java/com/google/gerrit/server/patch/PatchListLoader.java index 3b75f5bc8a..b511ae7b26 100644 --- a/java/com/google/gerrit/server/patch/PatchListLoader.java +++ b/java/com/google/gerrit/server/patch/PatchListLoader.java @@ -27,6 +27,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Multimap; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.client.DiffPreferencesInfo.Whitespace; import com.google.gerrit.reviewdb.client.Patch; import com.google.gerrit.reviewdb.client.Project; @@ -74,11 +75,9 @@ import org.eclipse.jgit.revwalk.RevTree; import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.treewalk.TreeWalk; import org.eclipse.jgit.util.io.DisabledOutputStream; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class PatchListLoader implements Callable { - static final Logger log = LoggerFactory.getLogger(PatchListLoader.class); + static final FluentLogger logger = FluentLogger.forEnclosingClass(); public interface Factory { PatchListLoader create(PatchListKey key, Project.NameKey project); @@ -449,19 +448,17 @@ public class PatchListLoader implements Callable { try { return result.get(timeoutMillis, TimeUnit.MILLISECONDS); } catch (InterruptedException | TimeoutException e) { - log.warn( - timeoutMillis - + " ms timeout reached for Diff loader" - + " in project " - + project - + " on commit " - + commitB.name() - + " on path " - + diffEntry.getNewPath() - + " comparing " - + diffEntry.getOldId().name() - + ".." - + diffEntry.getNewId().name()); + logger + .atWarning() + .log( + "%s ms timeout reached for Diff loader in project %s" + + " on commit %s on path %s comparing %s..%s", + timeoutMillis, + project, + commitB.name(), + diffEntry.getNewPath(), + diffEntry.getOldId().name(), + diffEntry.getNewId().name()); result.cancel(true); synchronized (diffEntry) { return toFileHeaderWithoutMyersDiff(diffFormatter, diffEntry); diff --git a/java/com/google/gerrit/server/patch/PatchScriptFactory.java b/java/com/google/gerrit/server/patch/PatchScriptFactory.java index b0e531037d..b1e0e3cf68 100644 --- a/java/com/google/gerrit/server/patch/PatchScriptFactory.java +++ b/java/com/google/gerrit/server/patch/PatchScriptFactory.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.patch; import static com.google.common.base.Preconditions.checkArgument; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.common.data.CommentDetail; import com.google.gerrit.common.data.PatchScript; @@ -57,10 +58,10 @@ import java.util.concurrent.Callable; import org.eclipse.jgit.errors.RepositoryNotFoundException; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.Repository; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class PatchScriptFactory implements Callable { + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + public interface Factory { PatchScriptFactory create( ChangeNotes notes, @@ -77,8 +78,6 @@ public class PatchScriptFactory implements Callable { DiffPreferencesInfo diffPrefs); } - private static final Logger log = LoggerFactory.getLogger(PatchScriptFactory.class); - private final GitRepositoryManager repoManager; private final PatchSetUtil psUtil; private final Provider builderFactory; @@ -232,16 +231,16 @@ public class PatchScriptFactory implements Callable { } catch (PatchListNotAvailableException e) { throw new NoSuchChangeException(changeId, e); } catch (IOException e) { - log.error("File content unavailable", e); + logger.atSevere().withCause(e).log("File content unavailable"); throw new NoSuchChangeException(changeId, e); } catch (org.eclipse.jgit.errors.LargeObjectException err) { throw new LargeObjectException("File content is too large", err); } } catch (RepositoryNotFoundException e) { - log.error("Repository " + notes.getProjectName() + " not found", e); + logger.atSevere().withCause(e).log("Repository %s not found", notes.getProjectName()); throw new NoSuchChangeException(changeId, e); } catch (IOException e) { - log.error("Cannot open repository " + notes.getProjectName(), e); + logger.atSevere().withCause(e).log("Cannot open repository %s", notes.getProjectName()); throw new NoSuchChangeException(changeId, e); } } @@ -277,7 +276,7 @@ public class PatchScriptFactory implements Callable { try { return ObjectId.fromString(ps.getRevision().get()); } catch (IllegalArgumentException e) { - log.error("Patch set " + ps.getId() + " has invalid revision"); + logger.atSevere().log("Patch set %s has invalid revision", ps.getId()); throw new NoSuchChangeException(changeId, e); } } diff --git a/java/com/google/gerrit/server/patch/Text.java b/java/com/google/gerrit/server/patch/Text.java index 9014171598..172dbaf78c 100644 --- a/java/com/google/gerrit/server/patch/Text.java +++ b/java/com/google/gerrit/server/patch/Text.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.patch; import static java.nio.charset.StandardCharsets.ISO_8859_1; import static java.nio.charset.StandardCharsets.UTF_8; +import com.google.common.flogger.FluentLogger; import java.io.IOException; import java.nio.charset.Charset; import java.nio.charset.IllegalCharsetNameException; @@ -34,11 +35,10 @@ import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.storage.pack.PackConfig; import org.eclipse.jgit.util.RawParseUtils; import org.mozilla.universalchardet.UniversalDetector; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class Text extends RawText { - private static final Logger log = LoggerFactory.getLogger(Text.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + private static final int bigFileThreshold = PackConfig.DEFAULT_BIG_FILE_THRESHOLD; public static final byte[] NO_BYTES = {}; @@ -157,11 +157,11 @@ public class Text extends RawText { return Charset.forName(encoding); } catch (IllegalCharsetNameException err) { - log.error("Invalid detected charset name '" + encoding + "': " + err); + logger.atSevere().log("Invalid detected charset name '%s': %s", encoding, err); return ISO_8859_1; } catch (UnsupportedCharsetException err) { - log.error("Detected charset '" + encoding + "' not supported: " + err); + logger.atSevere().log("Detected charset '%s' not supported: %s", encoding, err); return ISO_8859_1; } } diff --git a/java/com/google/gerrit/server/permissions/DefaultRefFilter.java b/java/com/google/gerrit/server/permissions/DefaultRefFilter.java index 966115641c..6a8813ae35 100644 --- a/java/com/google/gerrit/server/permissions/DefaultRefFilter.java +++ b/java/com/google/gerrit/server/permissions/DefaultRefFilter.java @@ -22,6 +22,7 @@ import static com.google.gerrit.reviewdb.client.RefNames.REFS_USERS_SELF; import static java.util.stream.Collectors.toMap; import com.google.common.collect.ImmutableSet; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.reviewdb.client.Account; @@ -60,11 +61,9 @@ import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.lib.SymbolicRef; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; class DefaultRefFilter { - private static final Logger log = LoggerFactory.getLogger(DefaultRefFilter.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); interface Factory { DefaultRefFilter create(ProjectControl projectControl); @@ -286,7 +285,10 @@ class DefaultRefFilter { } catch (AuthException e) { return false; } catch (PermissionBackendException e) { - log.error("Failed to check permission for " + id + " in " + projectState.getName(), e); + logger + .atSevere() + .withCause(e) + .log("Failed to check permission for %s in %s", id, projectState.getName()); return false; } } @@ -306,8 +308,10 @@ class DefaultRefFilter { } return visibleChanges; } catch (OrmException | PermissionBackendException e) { - log.error( - "Cannot load changes for project " + project + ", assuming no changes are visible", e); + logger + .atSevere() + .withCause(e) + .log("Cannot load changes for project %s, assuming no changes are visible", project); return Collections.emptyMap(); } } @@ -318,7 +322,10 @@ class DefaultRefFilter { try { s = changeNotesFactory.scan(repo, db.get(), p); } catch (IOException e) { - log.error("Cannot load changes for project " + p + ", assuming no changes are visible", e); + logger + .atSevere() + .withCause(e) + .log("Cannot load changes for project %s, assuming no changes are visible", p); return Collections.emptyMap(); } return s.map(this::toNotes) @@ -329,8 +336,10 @@ class DefaultRefFilter { @Nullable private ChangeNotes toNotes(ChangeNotesResult r) { if (r.error().isPresent()) { - log.warn( - "Failed to load change " + r.id() + " in " + projectState.getName(), r.error().get()); + logger + .atWarning() + .withCause(r.error().get()) + .log("Failed to load change %s in %s", r.id(), projectState.getName()); return null; } try { @@ -339,7 +348,10 @@ class DefaultRefFilter { return r.notes(); } } catch (PermissionBackendException e) { - log.error("Failed to check permission for " + r.id() + " in " + projectState.getName(), e); + logger + .atSevere() + .withCause(e) + .log("Failed to check permission for %s in %s", r.id(), projectState.getName()); } return null; } @@ -362,7 +374,7 @@ class DefaultRefFilter { } catch (AuthException e) { return false; } catch (PermissionBackendException e) { - log.error("unable to check permissions", e); + logger.atSevere().withCause(e).log("unable to check permissions"); return false; } return projectState.statePermitsRead(); @@ -375,10 +387,10 @@ class DefaultRefFilter { } catch (AuthException e) { return false; } catch (PermissionBackendException e) { - log.error( - String.format( - "Can't check permission for user %s on project %s", user, projectState.getName()), - e); + logger + .atSevere() + .withCause(e) + .log("Can't check permission for user %s on project %s", user, projectState.getName()); return false; } return true; diff --git a/java/com/google/gerrit/server/permissions/GlobalPermission.java b/java/com/google/gerrit/server/permissions/GlobalPermission.java index a789bd9fe6..ccdde4b4c4 100644 --- a/java/com/google/gerrit/server/permissions/GlobalPermission.java +++ b/java/com/google/gerrit/server/permissions/GlobalPermission.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.permissions; import static com.google.gerrit.server.permissions.DefaultPermissionMappings.globalPermission; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.extensions.annotations.CapabilityScope; import com.google.gerrit.extensions.annotations.RequiresAnyCapability; @@ -28,8 +29,6 @@ import java.util.Collections; import java.util.LinkedHashSet; import java.util.Optional; import java.util.Set; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Global server permissions built into Gerrit. */ public enum GlobalPermission implements GlobalOrPluginPermission { @@ -53,7 +52,7 @@ public enum GlobalPermission implements GlobalOrPluginPermission { VIEW_QUEUE, VIEW_ACCESS; - private static final Logger log = LoggerFactory.getLogger(GlobalPermission.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); /** * Extracts the {@code @RequiresCapability} or {@code @RequiresAnyCapability} annotation. @@ -70,12 +69,13 @@ public enum GlobalPermission implements GlobalOrPluginPermission { RequiresCapability rc = findAnnotation(clazz, RequiresCapability.class); RequiresAnyCapability rac = findAnnotation(clazz, RequiresAnyCapability.class); if (rc != null && rac != null) { - log.error( - String.format( + logger + .atSevere() + .log( "Class %s uses both @%s and @%s", clazz.getName(), RequiresCapability.class.getSimpleName(), - RequiresAnyCapability.class.getSimpleName())); + RequiresAnyCapability.class.getSimpleName()); throw new PermissionBackendException("cannot extract permission"); } else if (rc != null) { return Collections.singleton( @@ -124,17 +124,17 @@ public enum GlobalPermission implements GlobalOrPluginPermission { } if (scope == CapabilityScope.PLUGIN) { - log.error( - String.format( + logger + .atSevere() + .log( "Class %s uses @%s(scope=%s), but is not within a plugin", - clazz.getName(), annotationClass.getSimpleName(), scope.name())); + clazz.getName(), annotationClass.getSimpleName(), scope.name()); throw new PermissionBackendException("cannot extract permission"); } Optional perm = globalPermission(capability); if (!perm.isPresent()) { - log.error( - String.format("Class %s requires unknown capability %s", clazz.getName(), capability)); + logger.atSevere().log("Class %s requires unknown capability %s", clazz.getName(), capability); throw new PermissionBackendException("cannot extract permission"); } return perm.get(); diff --git a/java/com/google/gerrit/server/permissions/PermissionBackend.java b/java/com/google/gerrit/server/permissions/PermissionBackend.java index 8cdb61d919..f50f602472 100644 --- a/java/com/google/gerrit/server/permissions/PermissionBackend.java +++ b/java/com/google/gerrit/server/permissions/PermissionBackend.java @@ -19,6 +19,7 @@ import static java.util.stream.Collectors.toSet; import com.google.auto.value.AutoValue; import com.google.common.collect.Sets; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.LabelType; import com.google.gerrit.extensions.api.access.GlobalOrPluginPermission; import com.google.gerrit.extensions.conditions.BooleanCondition; @@ -44,8 +45,6 @@ import java.util.Set; import org.eclipse.jgit.errors.RepositoryNotFoundException; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Repository; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Checks authorization to perform an action on a project, reference, or change. @@ -91,7 +90,7 @@ import org.slf4j.LoggerFactory; */ @ImplementedBy(DefaultPermissionBackend.class) public abstract class PermissionBackend { - private static final Logger logger = LoggerFactory.getLogger(PermissionBackend.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); /** Returns an instance scoped to the current user. */ public abstract WithUser currentUser(); @@ -253,7 +252,7 @@ public abstract class PermissionBackend { try { return test(perm); } catch (PermissionBackendException e) { - logger.warn("Cannot test " + perm + "; assuming false", e); + logger.atWarning().withCause(e).log("Cannot test %s; assuming false", perm); return false; } } @@ -283,7 +282,10 @@ public abstract class PermissionBackend { // Do not include this project in allowed. } catch (PermissionBackendException e) { if (e.getCause() instanceof RepositoryNotFoundException) { - logger.warn("Could not find repository of the project {} : ", project.get(), e); + logger + .atWarning() + .withCause(e) + .log("Could not find repository of the project %s", project.get()); // Do not include this project because doesn't exist } else { throw e; @@ -350,7 +352,7 @@ public abstract class PermissionBackend { try { return test(perm); } catch (PermissionBackendException e) { - logger.warn("Cannot test " + perm + "; assuming false", e); + logger.atWarning().withCause(e).log("Cannot test %s; assuming false", perm); return false; } } @@ -456,7 +458,7 @@ public abstract class PermissionBackend { try { return test(perm); } catch (PermissionBackendException e) { - logger.warn("Cannot test " + perm + "; assuming false", e); + logger.atWarning().withCause(e).log("Cannot test %s; assuming false", perm); return false; } } @@ -506,7 +508,7 @@ public abstract class PermissionBackend { try { return test(perm); } catch (PermissionBackendException e) { - logger.warn("Cannot test " + perm + "; assuming false", e); + logger.atWarning().withCause(e).log("Cannot test %s; assuming false", perm); return false; } } diff --git a/java/com/google/gerrit/server/permissions/SectionSortCache.java b/java/com/google/gerrit/server/permissions/SectionSortCache.java index 18aea2994d..48c8bff8e1 100644 --- a/java/com/google/gerrit/server/permissions/SectionSortCache.java +++ b/java/com/google/gerrit/server/permissions/SectionSortCache.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.permissions; import com.google.auto.value.AutoValue; import com.google.common.cache.Cache; import com.google.common.collect.ImmutableList; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.AccessSection; import com.google.gerrit.server.cache.CacheModule; import com.google.gerrit.server.util.MostSpecificComparator; @@ -28,8 +29,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.IdentityHashMap; import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Caches the order AccessSections should be sorted for evaluation. @@ -41,7 +40,7 @@ import org.slf4j.LoggerFactory; */ @Singleton public class SectionSortCache { - private static final Logger log = LoggerFactory.getLogger(SectionSortCache.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final String CACHE_NAME = "permission_sort"; @@ -102,7 +101,7 @@ public class SectionSortCache { } if (poison) { - log.error("Received duplicate AccessSection instances, not caching sort"); + logger.atSevere().log("Received duplicate AccessSection instances, not caching sort"); } else { cache.put(key, new EntryVal(srcIdx)); } diff --git a/java/com/google/gerrit/server/plugins/AutoRegisterModules.java b/java/com/google/gerrit/server/plugins/AutoRegisterModules.java index da3abceb58..81dd027eab 100644 --- a/java/com/google/gerrit/server/plugins/AutoRegisterModules.java +++ b/java/com/google/gerrit/server/plugins/AutoRegisterModules.java @@ -20,6 +20,7 @@ import static com.google.gerrit.server.plugins.PluginGuiceEnvironment.is; import com.google.common.collect.LinkedListMultimap; import com.google.common.collect.ListMultimap; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.annotations.Export; import com.google.gerrit.extensions.annotations.ExtensionPoint; import com.google.gerrit.extensions.annotations.Listen; @@ -38,11 +39,9 @@ import java.util.Arrays; import java.util.HashSet; import java.util.Map; import java.util.Set; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; class AutoRegisterModules { - private static final Logger log = LoggerFactory.getLogger(AutoRegisterModules.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final String pluginName; private final PluginGuiceEnvironment env; @@ -134,12 +133,13 @@ class AutoRegisterModules { initJs = STATIC_INIT_JS; } } catch (IOException e) { - log.warn( - String.format( + logger + .atWarning() + .withCause(e) + .log( "Cannot access %s from plugin %s: " + "JavaScript auto-discovered plugin will not be registered", - STATIC_INIT_JS, pluginName), - e); + STATIC_INIT_JS, pluginName); } } @@ -155,10 +155,11 @@ class AutoRegisterModules { Export export = clazz.getAnnotation(Export.class); if (export == null) { - log.warn( - String.format( + logger + .atWarning() + .log( "In plugin %s asm incorrectly parsed %s with @Export(\"%s\")", - pluginName, clazz.getName(), def.annotationValue)); + pluginName, clazz.getName(), def.annotationValue); return; } @@ -192,9 +193,9 @@ class AutoRegisterModules { if (listen != null) { listen(clazz, clazz); } else { - log.warn( - String.format( - "In plugin %s asm incorrectly parsed %s with @Listen", pluginName, clazz.getName())); + logger + .atWarning() + .log("In plugin %s asm incorrectly parsed %s with @Listen", pluginName, clazz.getName()); } } diff --git a/java/com/google/gerrit/server/plugins/CleanupHandle.java b/java/com/google/gerrit/server/plugins/CleanupHandle.java index 5a60ee2365..607574191d 100644 --- a/java/com/google/gerrit/server/plugins/CleanupHandle.java +++ b/java/com/google/gerrit/server/plugins/CleanupHandle.java @@ -14,15 +14,14 @@ package com.google.gerrit.server.plugins; +import com.google.common.flogger.FluentLogger; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.jar.JarFile; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; class CleanupHandle { - private static final Logger log = LoggerFactory.getLogger(CleanupHandle.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final Path tmp; private final JarFile jarFile; @@ -36,17 +35,18 @@ class CleanupHandle { try { jarFile.close(); } catch (IOException err) { - log.error("Cannot close " + jarFile.getName(), err); + logger.atSevere().withCause(err).log("Cannot close %s", jarFile.getName()); } try { Files.deleteIfExists(tmp); - log.info("Cleaned plugin " + tmp.getFileName()); + logger.atInfo().log("Cleaned plugin %s", tmp.getFileName()); } catch (IOException e) { - log.warn( - "Cannot delete " - + tmp.toAbsolutePath() - + ", retrying to delete it on termination of the virtual machine", - e); + logger + .atWarning() + .withCause(e) + .log( + "Cannot delete %s, retrying to delete it on termination of the virtual machine", + tmp.toAbsolutePath()); tmp.toFile().deleteOnExit(); } } diff --git a/java/com/google/gerrit/server/plugins/JarPluginProvider.java b/java/com/google/gerrit/server/plugins/JarPluginProvider.java index cf54bf4d9d..229f394062 100644 --- a/java/com/google/gerrit/server/plugins/JarPluginProvider.java +++ b/java/com/google/gerrit/server/plugins/JarPluginProvider.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.plugins; import com.google.common.base.MoreObjects; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.server.config.PluginConfig; import com.google.gerrit.server.config.PluginConfigFactory; import com.google.gerrit.server.config.SitePaths; @@ -34,13 +35,12 @@ import java.util.List; import java.util.jar.JarFile; import java.util.jar.Manifest; import org.eclipse.jgit.internal.storage.file.FileSnapshot; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class JarPluginProvider implements ServerPluginProvider { + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + static final String PLUGIN_TMP_PREFIX = "plugin_"; static final String JAR_EXTENSION = ".jar"; - static final Logger log = LoggerFactory.getLogger(JarPluginProvider.class); private final Path tmpDir; private final PluginConfigFactory configFactory; @@ -129,7 +129,7 @@ public class JarPluginProvider implements ServerPluginProvider { if (overlay != null) { Path classes = Paths.get(overlay).resolve(name).resolve("main"); if (Files.isDirectory(classes)) { - log.info("plugin {}: including {}", name, classes); + logger.atInfo().log("plugin %s: including %s", name, classes); urls.add(classes.toUri().toURL()); } } diff --git a/java/com/google/gerrit/server/plugins/JarScanner.java b/java/com/google/gerrit/server/plugins/JarScanner.java index 1310b8c0dc..5fd2a927f8 100644 --- a/java/com/google/gerrit/server/plugins/JarScanner.java +++ b/java/com/google/gerrit/server/plugins/JarScanner.java @@ -23,6 +23,7 @@ import com.google.common.collect.ListMultimap; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.MultimapBuilder; +import com.google.common.flogger.FluentLogger; import java.io.IOException; import java.io.InputStream; import java.lang.annotation.Annotation; @@ -50,11 +51,10 @@ import org.objectweb.asm.FieldVisitor; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; import org.objectweb.asm.Type; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class JarScanner implements PluginContentScanner, AutoCloseable { - private static final Logger log = LoggerFactory.getLogger(JarScanner.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + private static final int SKIP_ALL = ClassReader.SKIP_CODE | ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES; private final JarFile jarFile; @@ -91,11 +91,12 @@ public class JarScanner implements PluginContentScanner, AutoCloseable { } catch (IOException err) { throw new InvalidPluginException("Cannot auto-register", err); } catch (RuntimeException err) { - log.warn( - String.format( + logger + .atWarning() + .withCause(err) + .log( "Plugin %s has invalid class file %s inside of %s", - pluginName, entry.getName(), jarFile.getName()), - err); + pluginName, entry.getName(), jarFile.getName()); continue; } @@ -103,10 +104,11 @@ public class JarScanner implements PluginContentScanner, AutoCloseable { if (def.isConcrete()) { rawMap.put(def.annotationName, def); } else { - log.warn( - String.format( + logger + .atWarning() + .log( "Plugin %s tries to @%s(\"%s\") abstract class %s", - pluginName, def.annotationName, def.annotationValue, def.className)); + pluginName, def.annotationName, def.annotationValue, def.className); } } } @@ -151,9 +153,10 @@ public class JarScanner implements PluginContentScanner, AutoCloseable { try { new ClassReader(read(jarFile, entry)).accept(def, SKIP_ALL); } catch (RuntimeException err) { - log.warn( - String.format("Jar %s has invalid class file %s", jarFile.getName(), entry.getName()), - err); + logger + .atWarning() + .withCause(err) + .log("Jar %s has invalid class file %s", jarFile.getName(), entry.getName()); continue; } diff --git a/java/com/google/gerrit/server/plugins/PluginCleanerTask.java b/java/com/google/gerrit/server/plugins/PluginCleanerTask.java index 5cff3450eb..99f8e5cfa7 100644 --- a/java/com/google/gerrit/server/plugins/PluginCleanerTask.java +++ b/java/com/google/gerrit/server/plugins/PluginCleanerTask.java @@ -14,18 +14,17 @@ package com.google.gerrit.server.plugins; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.TimeUtil; import com.google.gerrit.server.git.WorkQueue; import com.google.inject.Inject; import com.google.inject.Singleton; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton class PluginCleanerTask implements Runnable { - private static final Logger log = LoggerFactory.getLogger(PluginCleanerTask.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final WorkQueue workQueue; private final PluginLoader loader; @@ -58,10 +57,11 @@ class PluginCleanerTask implements Runnable { if (0 < left) { long waiting = TimeUtil.nowMs() - start; - log.warn( - String.format( + logger + .atWarning() + .log( "%d plugins still waiting to be reclaimed after %d minutes", - pending, TimeUnit.MILLISECONDS.toMinutes(waiting))); + pending, TimeUnit.MILLISECONDS.toMinutes(waiting)); attempts = Math.min(attempts + 1, 15); ensureScheduled(); } else { diff --git a/java/com/google/gerrit/server/plugins/PluginLoader.java b/java/com/google/gerrit/server/plugins/PluginLoader.java index 73f2cb291b..f5117166d9 100644 --- a/java/com/google/gerrit/server/plugins/PluginLoader.java +++ b/java/com/google/gerrit/server/plugins/PluginLoader.java @@ -26,6 +26,7 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.SetMultimap; import com.google.common.collect.Sets; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.events.LifecycleListener; import com.google.gerrit.extensions.restapi.MethodNotAllowedException; import com.google.gerrit.extensions.systemstatus.ServerInformation; @@ -62,12 +63,10 @@ import java.util.concurrent.ConcurrentMap; import java.util.concurrent.TimeUnit; import org.eclipse.jgit.internal.storage.file.FileSnapshot; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class PluginLoader implements LifecycleListener { - private static final Logger log = LoggerFactory.getLogger(PluginLoader.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public String getPluginName(Path srcPath) { return MoreObjects.firstNonNull(getGerritPluginName(srcPath), PluginUtil.nameOf(srcPath)); @@ -168,10 +167,11 @@ public class PluginLoader implements LifecycleListener { Path tmp = PluginUtil.asTemp(in, ".next_" + fileName + "_", ".tmp", pluginsDir); String name = MoreObjects.firstNonNull(getGerritPluginName(tmp), PluginUtil.nameOf(fileName)); if (!originalName.equals(name)) { - log.warn( - "Plugin provides its own name: <{}>, use it instead of the input name: <{}>", - name, - originalName); + logger + .atWarning() + .log( + "Plugin provides its own name: <%s>, use it instead of the input name: <%s>", + name, originalName); } String fileExtension = getExtension(fileName); @@ -180,7 +180,7 @@ public class PluginLoader implements LifecycleListener { Plugin active = running.get(name); if (active != null) { fileName = active.getSrcFile().getFileName().toString(); - log.info("Replacing plugin {}", active.getName()); + logger.atInfo().log("Replacing plugin %s", active.getName()); Path old = pluginsDir.resolve(".last_" + fileName); Files.deleteIfExists(old); Files.move(active.getSrcFile(), old); @@ -191,7 +191,7 @@ public class PluginLoader implements LifecycleListener { try { Plugin plugin = runPlugin(name, dst, active); if (active == null) { - log.info("Installed plugin {}", plugin.getName()); + logger.atInfo().log("Installed plugin %s", plugin.getName()); } } catch (PluginInstallException e) { Files.deleteIfExists(dst); @@ -207,7 +207,7 @@ public class PluginLoader implements LifecycleListener { private synchronized void unloadPlugin(Plugin plugin) { persistentCacheFactory.onStop(plugin.getName()); String name = plugin.getName(); - log.info("Unloading plugin {}, version {}", name, plugin.getVersion()); + logger.atInfo().log("Unloading plugin %s, version %s", name, plugin.getVersion()); plugin.stop(env); env.onStopPlugin(plugin); running.remove(name); @@ -217,7 +217,9 @@ public class PluginLoader implements LifecycleListener { public void disablePlugins(Set names) { if (!isRemoteAdminEnabled()) { - log.warn("Remote plugin administration is disabled, ignoring disablePlugins({})", names); + logger + .atWarning() + .log("Remote plugin administration is disabled, ignoring disablePlugins(%s)", names); return; } @@ -228,13 +230,13 @@ public class PluginLoader implements LifecycleListener { continue; } - log.info("Disabling plugin {}", active.getName()); + logger.atInfo().log("Disabling plugin %s", active.getName()); Path off = active.getSrcFile().resolveSibling(active.getSrcFile().getFileName() + ".disabled"); try { Files.move(active.getSrcFile(), off); } catch (IOException e) { - log.error("Failed to disable plugin", e); + logger.atSevere().withCause(e).log("Failed to disable plugin"); // In theory we could still unload the plugin even if the rename // failed. However, it would be reloaded on the next server startup, // which is probably not what the user expects. @@ -248,7 +250,10 @@ public class PluginLoader implements LifecycleListener { disabled.put(name, offPlugin); } catch (Throwable e) { // This shouldn't happen, as the plugin was loaded earlier. - log.warn("Cannot load disabled plugin {}", active.getName(), e.getCause()); + logger + .atWarning() + .withCause(e.getCause()) + .log("Cannot load disabled plugin %s", active.getName()); } } cleanInBackground(); @@ -257,7 +262,9 @@ public class PluginLoader implements LifecycleListener { public void enablePlugins(Set names) throws PluginInstallException { if (!isRemoteAdminEnabled()) { - log.warn("Remote plugin administration is disabled, ignoring enablePlugins({})", names); + logger + .atWarning() + .log("Remote plugin administration is disabled, ignoring enablePlugins(%s)", names); return; } @@ -268,7 +275,7 @@ public class PluginLoader implements LifecycleListener { continue; } - log.info("Enabling plugin {}", name); + logger.atInfo().log("Enabling plugin %s", name); String n = off.getSrcFile().toFile().getName(); if (n.endsWith(".disabled")) { n = n.substring(0, n.lastIndexOf('.')); @@ -277,7 +284,7 @@ public class PluginLoader implements LifecycleListener { try { Files.move(off.getSrcFile(), on); } catch (IOException e) { - log.error("Failed to move plugin {} into place", name, e); + logger.atSevere().withCause(e).log("Failed to move plugin %s into place", name); continue; } disabled.remove(name); @@ -297,16 +304,19 @@ public class PluginLoader implements LifecycleListener { }; try (DirectoryStream files = Files.newDirectoryStream(tempDir, filter)) { for (Path file : files) { - log.info("Removing stale plugin file: {}", file.toFile().getName()); + logger.atInfo().log("Removing stale plugin file: %s", file.toFile().getName()); try { Files.delete(file); } catch (IOException e) { - log.error( - "Failed to remove stale plugin file {}: {}", file.toFile().getName(), e.getMessage()); + logger + .atSevere() + .log( + "Failed to remove stale plugin file %s: %s", + file.toFile().getName(), e.getMessage()); } } } catch (IOException e) { - log.warn("Unable to discover stale plugin files: {}", e.getMessage()); + logger.atWarning().log("Unable to discover stale plugin files: %s", e.getMessage()); } } @@ -315,14 +325,14 @@ public class PluginLoader implements LifecycleListener { removeStalePluginFiles(); Path absolutePath = pluginsDir.toAbsolutePath(); if (!Files.exists(absolutePath)) { - log.info("{} does not exist; creating", absolutePath); + logger.atInfo().log("%s does not exist; creating", absolutePath); try { Files.createDirectories(absolutePath); } catch (IOException e) { - log.error("Failed to create {}: {}", absolutePath, e.getMessage()); + logger.atSevere().log("Failed to create %s: %s", absolutePath, e.getMessage()); } } - log.info("Loading plugins from {}", absolutePath); + logger.atInfo().log("Loading plugins from %s", absolutePath); srvInfoImpl.state = ServerInformation.State.STARTUP; rescan(); srvInfoImpl.state = ServerInformation.State.RUNNING; @@ -371,11 +381,13 @@ public class PluginLoader implements LifecycleListener { for (Plugin active : reload) { String name = active.getName(); try { - log.info("Reloading plugin {}", name); + logger.atInfo().log("Reloading plugin %s", name); Plugin newPlugin = runPlugin(name, active.getSrcFile(), active); - log.info("Reloaded plugin {}, version {}", newPlugin.getName(), newPlugin.getVersion()); + logger + .atInfo() + .log("Reloaded plugin %s, version %s", newPlugin.getName(), newPlugin.getVersion()); } catch (PluginInstallException e) { - log.warn("Cannot reload plugin {}", name, e.getCause()); + logger.atWarning().withCause(e.getCause()).log("Cannot reload plugin %s", name); throw e; } } @@ -398,7 +410,9 @@ public class PluginLoader implements LifecycleListener { Path path = entry.getValue(); String fileName = path.getFileName().toString(); if (!isUiPlugin(fileName) && !serverPluginFactory.handles(path)) { - log.warn("No Plugin provider was found that handles this file format: {}", fileName); + logger + .atWarning() + .log("No Plugin provider was found that handles this file format: %s", fileName); continue; } @@ -413,20 +427,22 @@ public class PluginLoader implements LifecycleListener { } if (active != null) { - log.info("Reloading plugin {}", active.getName()); + logger.atInfo().log("Reloading plugin %s", active.getName()); } try { Plugin loadedPlugin = runPlugin(name, path, active); if (!loadedPlugin.isDisabled()) { - log.info( - "{} plugin {}, version {}", - active == null ? "Loaded" : "Reloaded", - loadedPlugin.getName(), - loadedPlugin.getVersion()); + logger + .atInfo() + .log( + "%s plugin %s, version %s", + active == null ? "Loaded" : "Reloaded", + loadedPlugin.getName(), + loadedPlugin.getVersion()); } } catch (PluginInstallException e) { - log.warn("Cannot load plugin {}", name, e.getCause()); + logger.atWarning().withCause(e.getCause()).log("Cannot load plugin %s", name); } } @@ -660,20 +676,20 @@ public class PluginLoader implements LifecycleListener { Collection elementsToRemove = new ArrayList<>(); Collection elementsToAdd = new ArrayList<>(); for (Path loser : Iterables.skip(enabled, 1)) { - log.warn( - "Plugin <{}> was disabled, because" - + " another plugin <{}>" - + " with the same name <{}> already exists", - loser, - winner, - plugin); + logger + .atWarning() + .log( + "Plugin <%s> was disabled, because" + + " another plugin <%s>" + + " with the same name <%s> 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); + logger.atWarning().withCause(e).log("Failed to fully disable plugin %s", loser); } } Iterables.removeAll(files, elementsToRemove); @@ -686,7 +702,7 @@ public class PluginLoader implements LifecycleListener { try { return PluginUtil.listPlugins(pluginsDir); } catch (IOException e) { - log.error("Cannot list {}", pluginsDir.toAbsolutePath(), e); + logger.atSevere().withCause(e).log("Cannot list %s", pluginsDir.toAbsolutePath()); return ImmutableList.of(); } } diff --git a/java/com/google/gerrit/server/plugins/ServerPlugin.java b/java/com/google/gerrit/server/plugins/ServerPlugin.java index 3e6589c0df..b87014b3f6 100644 --- a/java/com/google/gerrit/server/plugins/ServerPlugin.java +++ b/java/com/google/gerrit/server/plugins/ServerPlugin.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.plugins; import com.google.common.base.Strings; import com.google.common.collect.Lists; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.extensions.registration.RegistrationHandle; import com.google.gerrit.extensions.registration.ReloadableRegistrationHandle; @@ -33,11 +34,9 @@ import java.util.List; import java.util.jar.Attributes; import java.util.jar.Manifest; import org.eclipse.jgit.internal.storage.file.FileSnapshot; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class ServerPlugin extends Plugin { - private static final Logger log = LoggerFactory.getLogger(ServerPlugin.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final Manifest manifest; private final PluginContentScanner scanner; @@ -160,9 +159,9 @@ public class ServerPlugin extends Plugin { } else if ("restart".equalsIgnoreCase(v)) { return false; } else { - log.warn( - String.format( - "Plugin %s has invalid Gerrit-ReloadMode %s; assuming restart", getName(), v)); + logger + .atWarning() + .log("Plugin %s has invalid Gerrit-ReloadMode %s; assuming restart", getName(), v); return false; } } diff --git a/java/com/google/gerrit/server/plugins/UniversalServerPluginProvider.java b/java/com/google/gerrit/server/plugins/UniversalServerPluginProvider.java index 50b8752150..b719e71bce 100644 --- a/java/com/google/gerrit/server/plugins/UniversalServerPluginProvider.java +++ b/java/com/google/gerrit/server/plugins/UniversalServerPluginProvider.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.plugins; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.registration.DynamicSet; import com.google.inject.Inject; import com.google.inject.Singleton; @@ -21,12 +22,10 @@ import java.nio.file.Path; import java.util.ArrayList; import java.util.List; import org.eclipse.jgit.internal.storage.file.FileSnapshot; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton class UniversalServerPluginProvider implements ServerPluginProvider { - private static final Logger log = LoggerFactory.getLogger(UniversalServerPluginProvider.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final DynamicSet serverPluginProviders; @@ -82,11 +81,11 @@ class UniversalServerPluginProvider implements ServerPluginProvider { List providers = new ArrayList<>(); for (ServerPluginProvider serverPluginProvider : serverPluginProviders) { boolean handles = serverPluginProvider.handles(srcPath); - log.debug( - "File {} handled by {} ? => {}", - srcPath, - serverPluginProvider.getProviderPluginName(), - handles); + logger + .atFine() + .log( + "File %s handled by %s ? => %s", + srcPath, serverPluginProvider.getProviderPluginName(), handles); if (handles) { providers.add(serverPluginProvider); } diff --git a/java/com/google/gerrit/server/project/CommentLinkProvider.java b/java/com/google/gerrit/server/project/CommentLinkProvider.java index 516965b99c..56cf51e3dd 100644 --- a/java/com/google/gerrit/server/project/CommentLinkProvider.java +++ b/java/com/google/gerrit/server/project/CommentLinkProvider.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.project; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.api.projects.CommentLinkInfo; import com.google.gerrit.server.config.ConfigUpdatedEvent; import com.google.gerrit.server.config.GerritConfigListener; @@ -27,12 +28,10 @@ import java.util.Collections; import java.util.List; import java.util.Set; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class CommentLinkProvider implements Provider>, GerritConfigListener { - private static final Logger log = LoggerFactory.getLogger(CommentLinkProvider.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private volatile List commentLinks; @@ -48,12 +47,12 @@ public class CommentLinkProvider implements Provider>, Ger try { CommentLinkInfoImpl cl = ProjectConfig.buildCommentLink(cfg, name, true); if (cl.isOverrideOnly()) { - log.warn("commentlink " + name + " empty except for \"enabled\""); + logger.atWarning().log("commentlink %s empty except for \"enabled\"", name); continue; } cls.add(cl); } catch (IllegalArgumentException e) { - log.warn("invalid commentlink: " + e.getMessage()); + logger.atWarning().log("invalid commentlink: %s", e.getMessage()); } } return ImmutableList.copyOf(cls); diff --git a/java/com/google/gerrit/server/project/ConfiguredMimeTypes.java b/java/com/google/gerrit/server/project/ConfiguredMimeTypes.java index 9181e806a9..28d036c1a6 100644 --- a/java/com/google/gerrit/server/project/ConfiguredMimeTypes.java +++ b/java/com/google/gerrit/server/project/ConfiguredMimeTypes.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.project; +import com.google.common.flogger.FluentLogger; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -23,11 +24,9 @@ import java.util.regex.PatternSyntaxException; import org.eclipse.jgit.errors.InvalidPatternException; import org.eclipse.jgit.fnmatch.FileNameMatcher; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class ConfiguredMimeTypes { - private static final Logger log = LoggerFactory.getLogger(ConfiguredMimeTypes.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final String MIMETYPE = "mimetype"; private static final String KEY_PATH = "path"; @@ -45,10 +44,11 @@ public class ConfiguredMimeTypes { try { add(typeName, path); } catch (PatternSyntaxException | InvalidPatternException e) { - log.warn( - String.format( + logger + .atWarning() + .log( "Ignoring invalid %s.%s.%s = %s in project %s: %s", - MIMETYPE, typeName, KEY_PATH, path, projectName, e.getMessage())); + MIMETYPE, typeName, KEY_PATH, path, projectName, e.getMessage()); } } } diff --git a/java/com/google/gerrit/server/project/CreateRefControl.java b/java/com/google/gerrit/server/project/CreateRefControl.java index 90a7455077..ddea227ce4 100644 --- a/java/com/google/gerrit/server/project/CreateRefControl.java +++ b/java/com/google/gerrit/server/project/CreateRefControl.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.project; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.ResourceConflictException; import com.google.gerrit.reviewdb.client.Branch; @@ -32,13 +33,11 @@ import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevObject; import org.eclipse.jgit.revwalk.RevTag; import org.eclipse.jgit.revwalk.RevWalk; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Manages access control for creating Git references (aka branches, tags). */ @Singleton public class CreateRefControl { - private static final Logger log = LoggerFactory.getLogger(CreateRefControl.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final PermissionBackend permissionBackend; private final ProjectCache projectCache; @@ -85,7 +84,10 @@ public class CreateRefControl { try (RevWalk rw = new RevWalk(repo)) { rw.parseBody(tag); } catch (IOException e) { - log.error(String.format("RevWalk(%s) parsing %s:", branch.getParentKey(), tag.name()), e); + logger + .atSevere() + .withCause(e) + .log("RevWalk(%s) parsing %s:", branch.getParentKey(), tag.name()); throw e; } diff --git a/java/com/google/gerrit/server/project/GroupList.java b/java/com/google/gerrit/server/project/GroupList.java index f70f2e6156..fdb87406fb 100644 --- a/java/com/google/gerrit/server/project/GroupList.java +++ b/java/com/google/gerrit/server/project/GroupList.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.project; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.GroupReference; import com.google.gerrit.reviewdb.client.AccountGroup; import com.google.gerrit.reviewdb.client.Project; @@ -26,11 +27,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class GroupList extends TabFile { - private static final Logger log = LoggerFactory.getLogger(GroupList.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static final String FILE_NAME = "groups"; @@ -46,7 +45,7 @@ public class GroupList extends TabFile { Map groupsByUUID = new HashMap<>(rows.size()); for (Row row : rows) { if (row.left == null) { - log.warn("null field in group list for {}:\n{}", project, text); + logger.atWarning().log("null field in group list for %s:\n%s", project, text); continue; } AccountGroup.UUID uuid = new AccountGroup.UUID(row.left); diff --git a/java/com/google/gerrit/server/project/ProjectCacheImpl.java b/java/com/google/gerrit/server/project/ProjectCacheImpl.java index 296965a992..1f51fda141 100644 --- a/java/com/google/gerrit/server/project/ProjectCacheImpl.java +++ b/java/com/google/gerrit/server/project/ProjectCacheImpl.java @@ -22,6 +22,7 @@ import com.google.common.cache.LoadingCache; import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSortedSet; import com.google.common.collect.Sets; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.index.project.ProjectIndexer; import com.google.gerrit.lifecycle.LifecycleModule; import com.google.gerrit.reviewdb.client.AccountGroup; @@ -44,13 +45,11 @@ import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import org.eclipse.jgit.errors.RepositoryNotFoundException; import org.eclipse.jgit.lib.Repository; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Cache of project information, including access rights. */ @Singleton public class ProjectCacheImpl implements ProjectCache { - private static final Logger log = LoggerFactory.getLogger(ProjectCacheImpl.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static final String CACHE_NAME = "projects"; @@ -132,7 +131,7 @@ public class ProjectCacheImpl implements ProjectCache { try { return checkedGet(projectName); } catch (IOException e) { - log.warn("Cannot read project " + projectName, e); + logger.atWarning().withCause(e).log("Cannot read project %s", projectName); return null; } } @@ -146,11 +145,11 @@ public class ProjectCacheImpl implements ProjectCache { return strictCheckedGet(projectName); } catch (Exception e) { if (!(e.getCause() instanceof RepositoryNotFoundException)) { - log.warn(String.format("Cannot read project %s", projectName.get()), e); + logger.atWarning().withCause(e).log("Cannot read project %s", projectName.get()); Throwables.throwIfInstanceOf(e.getCause(), IOException.class); throw new IOException(e); } - log.debug("Cannot find project {}", projectName.get(), e); + logger.atFine().withCause(e).log("Cannot find project %s", projectName.get()); return null; } } @@ -195,7 +194,7 @@ public class ProjectCacheImpl implements ProjectCache { ListKey.ALL, ImmutableSortedSet.copyOf(Sets.difference(list.get(ListKey.ALL), ImmutableSet.of(name)))); } catch (ExecutionException e) { - log.warn("Cannot list available projects", e); + logger.atWarning().withCause(e).log("Cannot list available projects"); } finally { listLock.unlock(); } @@ -211,7 +210,7 @@ public class ProjectCacheImpl implements ProjectCache { ImmutableSortedSet.copyOf( Sets.union(list.get(ListKey.ALL), ImmutableSet.of(newProjectName)))); } catch (ExecutionException e) { - log.warn("Cannot list available projects", e); + logger.atWarning().withCause(e).log("Cannot list available projects"); } finally { listLock.unlock(); } @@ -223,7 +222,7 @@ public class ProjectCacheImpl implements ProjectCache { try { return list.get(ListKey.ALL); } catch (ExecutionException e) { - log.warn("Cannot list available projects", e); + logger.atWarning().withCause(e).log("Cannot list available projects"); return ImmutableSortedSet.of(); } } @@ -249,7 +248,7 @@ public class ProjectCacheImpl implements ProjectCache { // Right endpoint is exclusive, but U+FFFF is a non-character so no project ends with it. return list.get(ListKey.ALL).subSet(start, end); } catch (ExecutionException e) { - log.warn("Cannot look up projects for prefix " + pfx, e); + logger.atWarning().withCause(e).log("Cannot look up projects for prefix %s", pfx); return ImmutableSortedSet.of(); } } diff --git a/java/com/google/gerrit/server/project/ProjectCacheWarmer.java b/java/com/google/gerrit/server/project/ProjectCacheWarmer.java index 10ab74655c..7ebbc51178 100644 --- a/java/com/google/gerrit/server/project/ProjectCacheWarmer.java +++ b/java/com/google/gerrit/server/project/ProjectCacheWarmer.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.project; +import com.google.common.flogger.FluentLogger; import com.google.common.util.concurrent.ThreadFactoryBuilder; import com.google.gerrit.extensions.events.LifecycleListener; import com.google.gerrit.reviewdb.client.Project; @@ -24,12 +25,10 @@ import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class ProjectCacheWarmer implements LifecycleListener { - private static final Logger log = LoggerFactory.getLogger(ProjectCacheWarmer.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final Config config; private final ProjectCache cache; @@ -57,15 +56,15 @@ public class ProjectCacheWarmer implements LifecycleListener { pool.shutdown(); try { pool.awaitTermination(Long.MAX_VALUE, TimeUnit.MILLISECONDS); - log.info("Finished loading project cache"); + logger.atInfo().log("Finished loading project cache"); } catch (InterruptedException e) { - log.warn("Interrupted while waiting for project cache to load"); + logger.atWarning().log("Interrupted while waiting for project cache to load"); } }); scheduler.setName("ProjectCacheWarmer"); scheduler.setDaemon(true); - log.info("Loading project cache"); + logger.atInfo().log("Loading project cache"); scheduler.start(); } } diff --git a/java/com/google/gerrit/server/project/ProjectHierarchyIterator.java b/java/com/google/gerrit/server/project/ProjectHierarchyIterator.java index ac8d5363a5..cc16fa545c 100644 --- a/java/com/google/gerrit/server/project/ProjectHierarchyIterator.java +++ b/java/com/google/gerrit/server/project/ProjectHierarchyIterator.java @@ -17,14 +17,13 @@ package com.google.gerrit.server.project; import com.google.common.base.Joiner; import com.google.common.collect.Lists; import com.google.common.collect.Sets; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.server.config.AllProjectsName; import java.util.Iterator; import java.util.List; import java.util.NoSuchElementException; import java.util.Set; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Iterates from a project up through its parents to All-Projects. @@ -32,7 +31,7 @@ import org.slf4j.LoggerFactory; *

If a cycle is detected the cycle is broken and All-Projects is visited. */ class ProjectHierarchyIterator implements Iterator { - private static final Logger log = LoggerFactory.getLogger(ProjectHierarchyIterator.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final ProjectCache cache; private final AllProjectsName allProjectsName; @@ -91,8 +90,11 @@ class ProjectHierarchyIterator implements Iterator { } int idx = order.lastIndexOf(parentName.get()); order.add(parentName.get()); - log.warn( - "Cycle detected in projects: " + Joiner.on(" -> ").join(order.subList(idx, order.size()))); + logger + .atWarning() + .log( + "Cycle detected in projects: %s", + Joiner.on(" -> ").join(order.subList(idx, order.size()))); return false; } diff --git a/java/com/google/gerrit/server/project/ProjectState.java b/java/com/google/gerrit/server/project/ProjectState.java index 28f620b97f..a490f1005a 100644 --- a/java/com/google/gerrit/server/project/ProjectState.java +++ b/java/com/google/gerrit/server/project/ProjectState.java @@ -21,6 +21,7 @@ import com.google.common.collect.FluentIterable; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.AccessSection; import com.google.gerrit.common.data.GroupReference; import com.google.gerrit.common.data.LabelType; @@ -66,12 +67,10 @@ import java.util.Set; import org.eclipse.jgit.errors.ConfigInvalidException; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Repository; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Cached information on a project. */ public class ProjectState { - private static final Logger log = LoggerFactory.getLogger(ProjectState.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public interface Factory { ProjectState create(ProjectConfig config); @@ -226,7 +225,7 @@ public class ProjectState { try (Repository git = gitMgr.openRepository(getNameKey())) { cfg.load(git, config.getRevision()); } catch (IOException | ConfigInvalidException e) { - log.warn("Failed to load " + fileName + " for " + getName(), e); + logger.atWarning().withCause(e).log("Failed to load %s for %s", fileName, getName()); } configs.put(fileName, cfg); @@ -517,7 +516,7 @@ public class ProjectState { if (!Files.exists(dir)) { return ThemeInfo.INHERIT; } else if (!Files.isDirectory(dir)) { - log.warn("Bad theme for {}: not a directory", name); + logger.atWarning().log("Bad theme for %s: not a directory", name); return ThemeInfo.INHERIT; } try { @@ -526,7 +525,7 @@ public class ProjectState { readFile(dir.resolve(SitePaths.HEADER_FILENAME)), readFile(dir.resolve(SitePaths.FOOTER_FILENAME))); } catch (IOException e) { - log.error("Error reading theme for " + name, e); + logger.atSevere().withCause(e).log("Error reading theme for %s", name); return ThemeInfo.INHERIT; } } diff --git a/java/com/google/gerrit/server/project/Reachable.java b/java/com/google/gerrit/server/project/Reachable.java index 0196d92511..d2ce9dd014 100644 --- a/java/com/google/gerrit/server/project/Reachable.java +++ b/java/com/google/gerrit/server/project/Reachable.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.project; import com.google.common.collect.Iterables; import com.google.common.collect.Maps; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.server.change.IncludedInResolver; import com.google.gerrit.server.permissions.PermissionBackend; @@ -32,8 +33,6 @@ import org.eclipse.jgit.lib.RefDatabase; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevWalk; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Report whether a commit is reachable from a set of commits. This is used for checking if a user @@ -41,7 +40,7 @@ import org.slf4j.LoggerFactory; */ @Singleton public class Reachable { - private static final Logger log = LoggerFactory.getLogger(Reachable.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final PermissionBackend permissionBackend; @@ -61,11 +60,12 @@ public class Reachable { .filter(refs, repo, RefFilterOptions.builder().setFilterTagsSeparately(true).build()); return IncludedInResolver.includedInAny(repo, rw, commit, filtered.values()); } catch (IOException | PermissionBackendException e) { - log.error( - String.format( + logger + .atSevere() + .withCause(e) + .log( "Cannot verify permissions to commit object %s in repository %s", - commit.name(), project), - e); + commit.name(), project); return false; } } @@ -82,11 +82,12 @@ public class Reachable { } return fromRefs(project, repo, commit, refs); } catch (IOException e) { - log.error( - String.format( + logger + .atSevere() + .withCause(e) + .log( "Cannot verify permissions to commit object %s in repository %s", - commit.name(), project), - e); + commit.name(), project); return false; } } diff --git a/java/com/google/gerrit/server/project/RefUtil.java b/java/com/google/gerrit/server/project/RefUtil.java index e42a7df9d5..858e1d4a6d 100644 --- a/java/com/google/gerrit/server/project/RefUtil.java +++ b/java/com/google/gerrit/server/project/RefUtil.java @@ -18,6 +18,7 @@ import static org.eclipse.jgit.lib.Constants.R_REFS; import static org.eclipse.jgit.lib.Constants.R_TAGS; import com.google.common.collect.Iterables; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.reviewdb.client.RefNames; @@ -33,11 +34,9 @@ import org.eclipse.jgit.lib.RefDatabase; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.ObjectWalk; import org.eclipse.jgit.revwalk.RevWalk; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class RefUtil { - private static final Logger log = LoggerFactory.getLogger(RefUtil.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private RefUtil() {} @@ -51,11 +50,13 @@ public class RefUtil { } return revid; } catch (IOException err) { - log.error( - "Cannot resolve \"" + baseRevision + "\" in project \"" + projectName.get() + "\"", err); + logger + .atSevere() + .withCause(err) + .log("Cannot resolve \"%s\" in project \"%s\"", baseRevision, projectName.get()); throw new InvalidRevisionException(); } catch (RevisionSyntaxException err) { - log.error("Invalid revision syntax \"" + baseRevision + "\"", err); + logger.atSevere().withCause(err).log("Invalid revision syntax \"%s\"", baseRevision); throw new InvalidRevisionException(); } } @@ -89,9 +90,10 @@ public class RefUtil { } catch (IncorrectObjectTypeException | MissingObjectException err) { throw new InvalidRevisionException(); } catch (IOException err) { - log.error( - "Repository \"" + repo.getDirectory() + "\" may be corrupt; suggest running git fsck", - err); + logger + .atSevere() + .withCause(err) + .log("Repository \"%s\" may be corrupt; suggest running git fsck", repo.getDirectory()); throw new InvalidRevisionException(); } } diff --git a/java/com/google/gerrit/server/project/SubmitRuleEvaluator.java b/java/com/google/gerrit/server/project/SubmitRuleEvaluator.java index cb01b8164f..3fcb3a91ea 100644 --- a/java/com/google/gerrit/server/project/SubmitRuleEvaluator.java +++ b/java/com/google/gerrit/server/project/SubmitRuleEvaluator.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.project; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.SubmitRecord; import com.google.gerrit.common.data.SubmitTypeRecord; import com.google.gerrit.extensions.registration.DynamicSet; @@ -29,15 +30,14 @@ import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import java.util.stream.StreamSupport; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Evaluates a submit-like Prolog rule found in the rules.pl file of the current project and filters * the results through rules found in the parent projects, all the way up to All-Projects. */ public class SubmitRuleEvaluator { - private static final Logger log = LoggerFactory.getLogger(SubmitRuleEvaluator.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + private static final String DEFAULT_MSG = "Error evaluating project rules, check server log"; private final ProjectCache projectCache; @@ -119,9 +119,9 @@ public class SubmitRuleEvaluator { private List ruleError(String err, Exception e) { if (opts.logErrors()) { if (e == null) { - log.error(err); + logger.atSevere().log(err); } else { - log.error(err, e); + logger.atSevere().withCause(e).log(err); } return defaultRuleError(); } @@ -150,11 +150,7 @@ public class SubmitRuleEvaluator { private SubmitTypeRecord typeError(String err, Exception e) { if (opts.logErrors()) { - if (e == null) { - log.error(err); - } else { - log.error(err, e); - } + logger.atSevere().withCause(e).log(err); return defaultTypeError(); } return SubmitTypeRecord.error(err); diff --git a/java/com/google/gerrit/server/query/account/AccountQueryBuilder.java b/java/com/google/gerrit/server/query/account/AccountQueryBuilder.java index ce236dc728..e7ffd5e431 100644 --- a/java/com/google/gerrit/server/query/account/AccountQueryBuilder.java +++ b/java/com/google/gerrit/server/query/account/AccountQueryBuilder.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.query.account; import com.google.common.base.Splitter; import com.google.common.collect.Lists; +import com.google.common.flogger.FluentLogger; import com.google.common.primitives.Ints; import com.google.gerrit.common.errors.NotSignedInException; import com.google.gerrit.index.Index; @@ -41,12 +42,10 @@ import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.ProvisionException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Parses a query string meant to be applied to account objects. */ public class AccountQueryBuilder extends QueryBuilder { - private static final Logger log = LoggerFactory.getLogger(AccountQueryBuilder.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static final String FIELD_ACCOUNT = "account"; public static final String FIELD_CAN_SEE = "cansee"; @@ -226,7 +225,7 @@ public class AccountQueryBuilder extends QueryBuilder { try { return canSeeSecondaryEmails(); } catch (PermissionBackendException e) { - log.error("Permission check failed", e); + logger.atSevere().withCause(e).log("Permission check failed"); return false; } catch (QueryParseException e) { // User is not signed in. diff --git a/java/com/google/gerrit/server/query/change/ChangeIsVisibleToPredicate.java b/java/com/google/gerrit/server/query/change/ChangeIsVisibleToPredicate.java index 89f302bffa..916171b019 100644 --- a/java/com/google/gerrit/server/query/change/ChangeIsVisibleToPredicate.java +++ b/java/com/google/gerrit/server/query/change/ChangeIsVisibleToPredicate.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.query.change; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.index.query.IsVisibleToPredicate; import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.server.ReviewDb; @@ -30,11 +31,9 @@ import com.google.gwtorm.server.OrmException; import com.google.inject.Provider; import java.io.IOException; import org.eclipse.jgit.errors.RepositoryNotFoundException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class ChangeIsVisibleToPredicate extends IsVisibleToPredicate { - private static final Logger logger = LoggerFactory.getLogger(ChangeIsVisibleToPredicate.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); protected final Provider db; protected final ChangeNotes.Factory notesFactory; @@ -74,7 +73,7 @@ public class ChangeIsVisibleToPredicate extends IsVisibleToPredicate try { ProjectState projectState = projectCache.checkedGet(cd.project()); if (projectState == null) { - logger.info("No such project: {}", cd.project()); + logger.atInfo().log("No such project: %s", cd.project()); return false; } if (!projectState.statePermitsRead()) { @@ -94,8 +93,12 @@ public class ChangeIsVisibleToPredicate extends IsVisibleToPredicate } catch (PermissionBackendException e) { Throwable cause = e.getCause(); if (cause instanceof RepositoryNotFoundException) { - logger.warn( - "Skipping change {} because the corresponding repository was not found", cd.getId(), e); + logger + .atWarning() + .withCause(e) + .log( + "Skipping change %s because the corresponding repository was not found", + cd.getId()); return false; } throw new OrmException("unable to check permissions on change " + cd.getId(), e); diff --git a/java/com/google/gerrit/server/query/change/OutputStreamQuery.java b/java/com/google/gerrit/server/query/change/OutputStreamQuery.java index 0806edfeba..dc57a9b248 100644 --- a/java/com/google/gerrit/server/query/change/OutputStreamQuery.java +++ b/java/com/google/gerrit/server/query/change/OutputStreamQuery.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.query.change; import static com.google.common.base.Preconditions.checkState; import static java.nio.charset.StandardCharsets.UTF_8; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.TimeUtil; import com.google.gerrit.common.data.LabelTypes; import com.google.gerrit.index.query.QueryParseException; @@ -54,8 +55,6 @@ import java.util.Map; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.util.io.DisabledOutputStream; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Change query implementation that outputs to a stream in the style of an SSH command. @@ -64,7 +63,7 @@ import org.slf4j.LoggerFactory; * holding on to a single instance. */ public class OutputStreamQuery { - private static final Logger log = LoggerFactory.getLogger(OutputStreamQuery.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss zzz") @@ -214,7 +213,7 @@ public class OutputStreamQuery { stats.runTimeMilliseconds = TimeUtil.nowMs() - stats.runTimeMilliseconds; show(stats); } catch (OrmException err) { - log.error("Cannot execute query: " + queryString, err); + logger.atSevere().withCause(err).log("Cannot execute query: %s", queryString); ErrorMessage m = new ErrorMessage(); m.message = "cannot query database"; diff --git a/java/com/google/gerrit/server/query/change/ParentProjectPredicate.java b/java/com/google/gerrit/server/query/change/ParentProjectPredicate.java index a9de2b14cd..17d6448915 100644 --- a/java/com/google/gerrit/server/query/change/ParentProjectPredicate.java +++ b/java/com/google/gerrit/server/query/change/ParentProjectPredicate.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.query.change; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.common.ProjectInfo; import com.google.gerrit.index.query.OrPredicate; import com.google.gerrit.index.query.Predicate; @@ -25,11 +26,9 @@ import com.google.gerrit.server.project.ProjectState; import java.util.ArrayList; import java.util.Collections; import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class ParentProjectPredicate extends OrPredicate { - private static final Logger log = LoggerFactory.getLogger(ParentProjectPredicate.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); protected final String value; @@ -53,7 +52,7 @@ public class ParentProjectPredicate extends OrPredicate { r.add(new ProjectPredicate(p.name)); } } catch (PermissionBackendException e) { - log.warn("cannot check permissions to expand child projects", e); + logger.atWarning().withCause(e).log("cannot check permissions to expand child projects"); } return r; } diff --git a/java/com/google/gerrit/server/query/change/TrackingIdPredicate.java b/java/com/google/gerrit/server/query/change/TrackingIdPredicate.java index a3566a50f4..4f751c58da 100644 --- a/java/com/google/gerrit/server/query/change/TrackingIdPredicate.java +++ b/java/com/google/gerrit/server/query/change/TrackingIdPredicate.java @@ -14,14 +14,13 @@ package com.google.gerrit.server.query.change; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.server.index.change.ChangeField; import com.google.gwtorm.server.OrmException; import java.io.IOException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class TrackingIdPredicate extends ChangeIndexPredicate { - private static final Logger log = LoggerFactory.getLogger(TrackingIdPredicate.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public TrackingIdPredicate(String trackingId) { super(ChangeField.TR, trackingId); @@ -32,7 +31,7 @@ public class TrackingIdPredicate extends ChangeIndexPredicate { try { return cd.trackingFooters().containsValue(getValue()); } catch (IOException e) { - log.warn("Cannot extract footers from " + cd.getId(), e); + logger.atWarning().withCause(e).log("Cannot extract footers from %s", cd.getId()); } return false; } diff --git a/java/com/google/gerrit/server/query/group/InternalGroupQuery.java b/java/com/google/gerrit/server/query/group/InternalGroupQuery.java index 7a3a9056c6..d9808f214d 100644 --- a/java/com/google/gerrit/server/query/group/InternalGroupQuery.java +++ b/java/com/google/gerrit/server/query/group/InternalGroupQuery.java @@ -18,6 +18,7 @@ import static com.google.common.collect.ImmutableList.toImmutableList; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.index.IndexConfig; import com.google.gerrit.index.query.InternalQuery; import com.google.gerrit.index.query.Predicate; @@ -29,8 +30,6 @@ import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import java.util.List; import java.util.Optional; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Query wrapper for the group index. @@ -39,7 +38,7 @@ import org.slf4j.LoggerFactory; * holding on to a single instance. */ public class InternalGroupQuery extends InternalQuery { - private static final Logger log = LoggerFactory.getLogger(InternalGroupQuery.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); @Inject InternalGroupQuery( @@ -76,7 +75,7 @@ public class InternalGroupQuery extends InternalQuery { ImmutableList groupUuids = groups.stream().map(InternalGroup::getGroupUUID).collect(toImmutableList()); - log.warn(String.format("Ambiguous %s for groups %s.", groupDescription, groupUuids)); + logger.atWarning().log("Ambiguous %s for groups %s.", groupDescription, groupUuids); return Optional.empty(); } } diff --git a/java/com/google/gerrit/server/rules/DefaultSubmitRule.java b/java/com/google/gerrit/server/rules/DefaultSubmitRule.java index a9482fe691..94931ba580 100644 --- a/java/com/google/gerrit/server/rules/DefaultSubmitRule.java +++ b/java/com/google/gerrit/server/rules/DefaultSubmitRule.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.rules; import static com.google.common.collect.ImmutableList.toImmutableList; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.LabelFunction; import com.google.gerrit.common.data.LabelType; import com.google.gerrit.common.data.SubmitRecord; @@ -33,8 +34,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Java implementation of Gerrit's default pre-submit rules behavior: check if the labels have the @@ -45,7 +44,7 @@ import org.slf4j.LoggerFactory; */ @Singleton public final class DefaultSubmitRule implements SubmitRule { - private static final Logger log = LoggerFactory.getLogger(DefaultSubmitRule.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static class Module extends FactoryModule { @Override @@ -82,7 +81,10 @@ public final class DefaultSubmitRule implements SubmitRule { labelTypes = cd.getLabelTypes().getLabelTypes(); approvals = cd.currentApprovals(); } catch (OrmException e) { - log.error("Unable to fetch labels and approvals for change {}", cd.getId(), e); + logger + .atSevere() + .withCause(e) + .log("Unable to fetch labels and approvals for change %s", cd.getId()); submitRecord.errorMessage = "Unable to fetch labels and approvals for the change"; submitRecord.status = SubmitRecord.Status.RULE_ERROR; @@ -94,8 +96,11 @@ public final class DefaultSubmitRule implements SubmitRule { for (LabelType t : labelTypes) { LabelFunction labelFunction = t.getFunction(); if (labelFunction == null) { - log.error( - "Unable to find the LabelFunction for label {}, change {}", t.getName(), cd.getId()); + logger + .atSevere() + .log( + "Unable to find the LabelFunction for label %s, change %s", + t.getName(), cd.getId()); submitRecord.errorMessage = "Unable to find the LabelFunction for label " + t.getName(); submitRecord.status = SubmitRecord.Status.RULE_ERROR; diff --git a/java/com/google/gerrit/server/rules/PrologEnvironment.java b/java/com/google/gerrit/server/rules/PrologEnvironment.java index 9dd0b8673b..083898b83a 100644 --- a/java/com/google/gerrit/server/rules/PrologEnvironment.java +++ b/java/com/google/gerrit/server/rules/PrologEnvironment.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.rules; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.server.AnonymousUser; import com.google.gerrit.server.IdentifiedUser; import com.google.gerrit.server.PatchSetUtil; @@ -39,8 +40,6 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Per-thread Prolog interpreter. @@ -50,7 +49,7 @@ import org.slf4j.LoggerFactory; *

A single copy of the Prolog interpreter, for the current thread. */ public class PrologEnvironment extends BufferingPrologControl { - private static final Logger log = LoggerFactory.getLogger(PrologEnvironment.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public interface Factory { /** @@ -142,7 +141,7 @@ public class PrologEnvironment extends BufferingPrologControl { try { i.next().run(); } catch (Throwable err) { - log.error("Failed to execute cleanup for PrologEnvironment", err); + logger.atSevere().withCause(err).log("Failed to execute cleanup for PrologEnvironment"); } i.remove(); } diff --git a/java/com/google/gerrit/server/rules/PrologRuleEvaluator.java b/java/com/google/gerrit/server/rules/PrologRuleEvaluator.java index 0cc907d6cf..5e2cfcc836 100644 --- a/java/com/google/gerrit/server/rules/PrologRuleEvaluator.java +++ b/java/com/google/gerrit/server/rules/PrologRuleEvaluator.java @@ -18,6 +18,7 @@ import static com.google.gerrit.server.project.SubmitRuleEvaluator.createRuleErr import static com.google.gerrit.server.project.SubmitRuleEvaluator.defaultRuleError; import static com.google.gerrit.server.project.SubmitRuleEvaluator.defaultTypeError; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.SubmitRecord; import com.google.gerrit.common.data.SubmitTypeRecord; import com.google.gerrit.extensions.client.SubmitType; @@ -50,15 +51,13 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Evaluates a submit-like Prolog rule found in the rules.pl file of the current project and filters * the results through rules found in the parent projects, all the way up to All-Projects. */ public class PrologRuleEvaluator { - private static final Logger log = LoggerFactory.getLogger(PrologRuleEvaluator.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public interface Factory { /** Returns a new {@link PrologRuleEvaluator} with the specified options */ @@ -302,11 +301,7 @@ public class PrologRuleEvaluator { private List ruleError(String err, Exception e) { if (opts.logErrors()) { - if (e == null) { - log.error(err); - } else { - log.error(err, e); - } + logger.atSevere().withCause(e).log(err); return defaultRuleError(); } return createRuleError(err); @@ -384,11 +379,7 @@ public class PrologRuleEvaluator { private SubmitTypeRecord typeError(String err, Exception e) { if (opts.logErrors()) { - if (e == null) { - log.error(err); - } else { - log.error(err, e); - } + logger.atSevere().withCause(e).log(err); return defaultTypeError(); } return SubmitTypeRecord.error(err); diff --git a/java/com/google/gerrit/server/schema/BUILD b/java/com/google/gerrit/server/schema/BUILD index 32a14dbbc0..44bede9f34 100644 --- a/java/com/google/gerrit/server/schema/BUILD +++ b/java/com/google/gerrit/server/schema/BUILD @@ -18,10 +18,10 @@ java_library( "//lib/auto:auto-value", "//lib/auto:auto-value-annotations", "//lib/commons:dbcp", + "//lib/flogger:api", "//lib/guice", "//lib/jgit/org.eclipse.jgit.archive:jgit-archive", "//lib/jgit/org.eclipse.jgit:jgit", - "//lib/log:api", "//lib/log:jsonevent-layout", "//lib/log:log4j", ], diff --git a/java/com/google/gerrit/server/schema/GroupBundle.java b/java/com/google/gerrit/server/schema/GroupBundle.java index e15587bf96..3988418592 100644 --- a/java/com/google/gerrit/server/schema/GroupBundle.java +++ b/java/com/google/gerrit/server/schema/GroupBundle.java @@ -30,6 +30,7 @@ import com.google.common.collect.ListMultimap; import com.google.common.collect.MultimapBuilder; import com.google.common.collect.Multimaps; import com.google.common.collect.Streams; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.TimeUtil; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.reviewdb.client.AccountGroup; @@ -60,8 +61,6 @@ import java.util.function.Function; import java.util.stream.Stream; import org.eclipse.jgit.errors.ConfigInvalidException; import org.eclipse.jgit.lib.Repository; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * A bundle of all entities rooted at a single {@link AccountGroup} entity. @@ -71,7 +70,7 @@ import org.slf4j.LoggerFactory; */ @AutoValue abstract class GroupBundle { - private static final Logger log = LoggerFactory.getLogger(GroupBundle.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); static { // Initialization-time checks that the column set hasn't changed since the @@ -414,12 +413,11 @@ abstract class GroupBundle { // corrupt, and it's not clear if we can programmatically repair it. For migrating to NoteDb, // we'll try our best to recreate it, but no guarantees it will match the real sequence of // attempted operations, which is in any case lost in the mists of time. - log.warn( - "group {} in {} has duplicate {} entities: {}", - uuid, - source, - clazz.getSimpleName(), - iterable); + logger + .atWarning() + .log( + "group %s in %s has duplicate %s entities: %s", + uuid, source, clazz.getSimpleName(), iterable); } return set; } diff --git a/java/com/google/gerrit/server/schema/JdbcAccountPatchReviewStore.java b/java/com/google/gerrit/server/schema/JdbcAccountPatchReviewStore.java index 43f39b29d7..83a0986bf5 100644 --- a/java/com/google/gerrit/server/schema/JdbcAccountPatchReviewStore.java +++ b/java/com/google/gerrit/server/schema/JdbcAccountPatchReviewStore.java @@ -18,6 +18,7 @@ import static java.util.concurrent.TimeUnit.MILLISECONDS; import static java.util.concurrent.TimeUnit.SECONDS; import com.google.common.collect.ImmutableSet; +import com.google.common.flogger.FluentLogger; import com.google.common.primitives.Ints; import com.google.gerrit.extensions.events.LifecycleListener; import com.google.gerrit.extensions.registration.DynamicItem; @@ -41,18 +42,17 @@ import java.util.Optional; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSource; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public abstract class JdbcAccountPatchReviewStore implements AccountPatchReviewStore, LifecycleListener { + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + private static final String ACCOUNT_PATCH_REVIEW_DB = "accountPatchReviewDb"; private static final String H2_DB = "h2"; private static final String MARIADB = "mariadb"; private static final String MYSQL = "mysql"; private static final String POSTGRESQL = "postgresql"; private static final String URL = "url"; - private static final Logger log = LoggerFactory.getLogger(JdbcAccountPatchReviewStore.class); public static class Module extends LifecycleModule { private final Config cfg; @@ -164,7 +164,7 @@ public abstract class JdbcAccountPatchReviewStore try { createTableIfNotExists(); } catch (OrmException e) { - log.error("Failed to create table to store account patch reviews", e); + logger.atSevere().withCause(e).log("Failed to create table to store account patch reviews"); } } diff --git a/java/com/google/gerrit/server/schema/Schema_154.java b/java/com/google/gerrit/server/schema/Schema_154.java index 64479212b4..8dfd356fc0 100644 --- a/java/com/google/gerrit/server/schema/Schema_154.java +++ b/java/com/google/gerrit/server/schema/Schema_154.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.schema; import static java.util.stream.Collectors.toMap; import com.google.common.collect.ImmutableMap; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.reviewdb.server.ReviewDb; import com.google.gerrit.server.GerritPersonIdent; @@ -44,12 +45,11 @@ import org.eclipse.jgit.lib.PersonIdent; import org.eclipse.jgit.lib.ProgressMonitor; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.lib.TextProgressMonitor; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Migrate accounts to NoteDb. */ public class Schema_154 extends SchemaVersion { - private static final Logger log = LoggerFactory.getLogger(Schema_154.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + private static final String TABLE = "accounts"; private static final ImmutableMap ACCOUNT_FIELDS_MAP = ImmutableMap.builder() @@ -98,7 +98,7 @@ public class Schema_154 extends SchemaVersion { private Set scanAccounts(ReviewDb db, ProgressMonitor pm) throws SQLException { Map fields = getFields(db); if (fields.isEmpty()) { - log.warn("Only account_id and registered_on fields are migrated for accounts"); + logger.atWarning().log("Only account_id and registered_on fields are migrated for accounts"); } List queryFields = new ArrayList<>(); diff --git a/java/com/google/gerrit/server/schema/Schema_167.java b/java/com/google/gerrit/server/schema/Schema_167.java index 5e93b2c146..ff08c1aff0 100644 --- a/java/com/google/gerrit/server/schema/Schema_167.java +++ b/java/com/google/gerrit/server/schema/Schema_167.java @@ -20,6 +20,7 @@ import static com.google.gerrit.server.notedb.NotesMigration.SECTION_NOTE_DB; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.common.data.GroupDescription; import com.google.gerrit.common.data.GroupReference; @@ -57,12 +58,10 @@ import org.eclipse.jgit.lib.Config; import org.eclipse.jgit.lib.ObjectInserter; import org.eclipse.jgit.lib.PersonIdent; import org.eclipse.jgit.lib.Repository; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Migrate groups from ReviewDb to NoteDb. */ public class Schema_167 extends SchemaVersion { - private static final Logger log = LoggerFactory.getLogger(Schema_167.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final GitRepositoryManager repoManager; private final AllUsersName allUsersName; @@ -196,11 +195,13 @@ public class Schema_167 extends SchemaVersion { AccountConfig accountConfig = new AccountConfig(accountId, allUsersRepo).load(); return accountConfig.getLoadedAccount(); } catch (IOException | ConfigInvalidException ignored) { - log.warn( - "Failed to load account {}." - + " Cannot get account name for group audit log commit messages.", - accountId.get(), - ignored); + logger + .atWarning() + .withCause(ignored) + .log( + "Failed to load account %s." + + " Cannot get account name for group audit log commit messages.", + accountId.get()); return Optional.empty(); } } @@ -248,11 +249,13 @@ public class Schema_167 extends SchemaVersion { } return groupDescriptions; } catch (SQLException ignored) { - log.warn( - "Failed to load group {}." - + " Cannot get group name for group audit log commit messages.", - groupUuid.get(), - ignored); + logger + .atWarning() + .withCause(ignored) + .log( + "Failed to load group %s." + + " Cannot get group name for group audit log commit messages.", + groupUuid.get()); return ImmutableList.of(); } } diff --git a/java/com/google/gerrit/server/securestore/SecureStoreProvider.java b/java/com/google/gerrit/server/securestore/SecureStoreProvider.java index 88c2072f70..4e43b2e177 100644 --- a/java/com/google/gerrit/server/securestore/SecureStoreProvider.java +++ b/java/com/google/gerrit/server/securestore/SecureStoreProvider.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.securestore; import com.google.common.base.Strings; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.common.SiteLibraryLoaderUtil; import com.google.gerrit.server.config.SitePaths; @@ -23,12 +24,10 @@ import com.google.inject.Injector; import com.google.inject.Provider; import com.google.inject.Singleton; import java.nio.file.Path; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class SecureStoreProvider implements Provider { - private static final Logger log = LoggerFactory.getLogger(SecureStoreProvider.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final Path libdir; private final Injector injector; @@ -58,7 +57,7 @@ public class SecureStoreProvider implements Provider { return (Class) Class.forName(className); } catch (ClassNotFoundException e) { String msg = String.format("Cannot load secure store class: %s", className); - log.error(msg, e); + logger.atSevere().withCause(e).log(msg); throw new RuntimeException(msg, e); } } diff --git a/java/com/google/gerrit/server/ssh/SshAddressesModule.java b/java/com/google/gerrit/server/ssh/SshAddressesModule.java index 0e5b2f805b..0a6bcace0f 100644 --- a/java/com/google/gerrit/server/ssh/SshAddressesModule.java +++ b/java/com/google/gerrit/server/ssh/SshAddressesModule.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.ssh; import com.google.common.collect.Lists; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.server.config.GerritServerConfig; import com.google.gerrit.server.util.SocketUtil; import com.google.inject.AbstractModule; @@ -26,11 +27,9 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class SshAddressesModule extends AbstractModule { - private static final Logger log = LoggerFactory.getLogger(SshAddressesModule.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static final int DEFAULT_PORT = 29418; public static final int IANA_SSH_PORT = 22; @@ -57,7 +56,7 @@ public class SshAddressesModule extends AbstractModule { try { listen.add(SocketUtil.resolve(desc, DEFAULT_PORT)); } catch (IllegalArgumentException e) { - log.error("Bad sshd.listenaddress: " + desc + ": " + e.getMessage()); + logger.atSevere().log("Bad sshd.listenaddress: %s: %s", desc, e.getMessage()); } } return listen; diff --git a/java/com/google/gerrit/server/submit/EmailMerge.java b/java/com/google/gerrit/server/submit/EmailMerge.java index aceb82405e..a6b7344719 100644 --- a/java/com/google/gerrit/server/submit/EmailMerge.java +++ b/java/com/google/gerrit/server/submit/EmailMerge.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.submit; import com.google.common.collect.ListMultimap; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.extensions.api.changes.NotifyHandling; import com.google.gerrit.extensions.api.changes.RecipientType; @@ -37,11 +38,9 @@ import com.google.inject.ProvisionException; import com.google.inject.assistedinject.Assisted; import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; class EmailMerge implements Runnable, RequestContext { - private static final Logger log = LoggerFactory.getLogger(EmailMerge.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); interface Factory { EmailMerge create( @@ -107,7 +106,7 @@ class EmailMerge implements Runnable, RequestContext { cm.setAccountsToNotify(accountsToNotify); cm.send(); } catch (Exception e) { - log.error("Cannot email merged notification for " + changeId, e); + logger.atSevere().withCause(e).log("Cannot email merged notification for %s", changeId); } finally { requestContext.setContext(old); if (db != null) { diff --git a/java/com/google/gerrit/server/submit/GitModules.java b/java/com/google/gerrit/server/submit/GitModules.java index 92e0cb36c5..b7eb68f848 100644 --- a/java/com/google/gerrit/server/submit/GitModules.java +++ b/java/com/google/gerrit/server/submit/GitModules.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.submit; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.reviewdb.client.Branch; import com.google.gerrit.reviewdb.client.Project; @@ -36,15 +37,13 @@ import org.eclipse.jgit.lib.FileMode; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.treewalk.TreeWalk; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Loads the .gitmodules file of the specified project/branch. It can be queried which submodules * this branch is subscribed to. */ public class GitModules { - private static final Logger log = LoggerFactory.getLogger(GitModules.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public interface Factory { GitModules create(Branch.NameKey project, MergeOpRepoManager m); @@ -105,8 +104,8 @@ public class GitModules { } private void logDebug(String msg, Object... args) { - if (log.isDebugEnabled()) { - log.debug(submissionId + msg, args); + if (logger.atFine().isEnabled()) { + logger.atFine().logVarargs(submissionId + msg, args); } } } diff --git a/java/com/google/gerrit/server/submit/LocalMergeSuperSetComputation.java b/java/com/google/gerrit/server/submit/LocalMergeSuperSetComputation.java index fa20ad935b..06f57b56d8 100644 --- a/java/com/google/gerrit/server/submit/LocalMergeSuperSetComputation.java +++ b/java/com/google/gerrit/server/submit/LocalMergeSuperSetComputation.java @@ -21,6 +21,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableListMultimap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.SubmitTypeRecord; import com.google.gerrit.extensions.client.SubmitType; import com.google.gerrit.extensions.registration.DynamicItem; @@ -55,15 +56,13 @@ import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevSort; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Default implementation of MergeSuperSet that does the computation of the merge super set * sequentially on the local Gerrit instance. */ public class LocalMergeSuperSetComputation implements MergeSuperSetComputation { - private static final Logger log = LoggerFactory.getLogger(LocalMergeSuperSetComputation.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static class Module extends AbstractModule { @Override @@ -261,9 +260,7 @@ public class LocalMergeSuperSetComputation implements MergeSuperSetComputation { } private void logErrorAndThrow(String msg) throws OrmException { - if (log.isErrorEnabled()) { - log.error(msg); - } + logger.atSevere().log(msg); throw new OrmException(msg); } } diff --git a/java/com/google/gerrit/server/submit/MergeOp.java b/java/com/google/gerrit/server/submit/MergeOp.java index 7dd1ac9564..b5b11f2cf6 100644 --- a/java/com/google/gerrit/server/submit/MergeOp.java +++ b/java/com/google/gerrit/server/submit/MergeOp.java @@ -31,6 +31,7 @@ import com.google.common.collect.ImmutableSetMultimap; import com.google.common.collect.ListMultimap; import com.google.common.collect.MultimapBuilder; import com.google.common.collect.SetMultimap; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.common.TimeUtil; import com.google.gerrit.common.data.SubmitRecord; @@ -96,8 +97,6 @@ import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.revwalk.RevCommit; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Merges changes in submission order into a single branch. @@ -111,7 +110,7 @@ import org.slf4j.LoggerFactory; * conflicting, even if an earlier commit along that same line can be merged cleanly. */ public class MergeOp implements AutoCloseable { - private static final Logger log = LoggerFactory.getLogger(MergeOp.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final SubmitRuleOptions SUBMIT_RULE_OPTIONS = SubmitRuleOptions.builder().build(); private static final SubmitRuleOptions SUBMIT_RULE_OPTIONS_ALLOW_CLOSED = @@ -160,12 +159,12 @@ public class MergeOp implements AutoCloseable { public void logProblem(Change.Id id, Throwable t) { String msg = "Error reading change"; - log.error(msg + " " + id, t); + logger.atSevere().withCause(t).log("%s %s", msg, id); problems.put(id, msg); } public void logProblem(Change.Id id, String msg) { - log.error(msg + " " + id); + logger.atSevere().log("%s %s", msg, id); problems.put(id, msg); } @@ -390,7 +389,7 @@ public class MergeOp implements AutoCloseable { commitStatus.problem(cd.getId(), e.getMessage()); } catch (OrmException e) { String msg = "Error checking submit rules for change"; - log.warn(msg + " " + cd.getId(), e); + logger.atWarning().withCause(e).log("%s %s", msg, cd.getId()); commitStatus.problem(cd.getId(), msg); } } @@ -938,31 +937,21 @@ public class MergeOp implements AutoCloseable { } private void logDebug(String msg, Object... args) { - if (log.isDebugEnabled()) { - log.debug(submissionId + msg, args); + if (logger.atFine().isEnabled()) { + logger.atFine().logVarargs(submissionId + msg, args); } } private void logWarn(String msg, Throwable t) { - if (log.isWarnEnabled()) { - log.warn(submissionId + msg, t); - } + logger.atWarning().withCause(t).log("%s%s", submissionId, msg); } private void logWarn(String msg) { - if (log.isWarnEnabled()) { - log.warn(submissionId + msg); - } + logger.atWarning().log("%s%s", submissionId, msg); } private void logError(String msg, Throwable t) { - if (log.isErrorEnabled()) { - if (t != null) { - log.error(submissionId + msg, t); - } else { - log.error(submissionId + msg); - } - } + logger.atSevere().withCause(t).log("%s%s", submissionId, msg); } private void logError(String msg) { diff --git a/java/com/google/gerrit/server/submit/RebaseSorter.java b/java/com/google/gerrit/server/submit/RebaseSorter.java index c11ce4f6c9..7fb1743181 100644 --- a/java/com/google/gerrit/server/submit/RebaseSorter.java +++ b/java/com/google/gerrit/server/submit/RebaseSorter.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.submit; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.reviewdb.client.Branch; import com.google.gerrit.reviewdb.client.Change.Status; import com.google.gerrit.server.git.CodeReviewCommit; @@ -32,11 +33,9 @@ import java.util.List; import java.util.Set; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevFlag; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class RebaseSorter { - private static final Logger log = LoggerFactory.getLogger(RebaseSorter.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final CodeReviewRevWalk rw; private final RevFlag canMergeFlag; @@ -110,8 +109,11 @@ public class RebaseSorter { // check if the commit is merged in other branches for (RevCommit accepted : alreadyAccepted) { if (mirw.isMergedInto(mirw.parseCommit(commit), mirw.parseCommit(accepted))) { - log.debug( - "Dependency {} merged into branch head {}.", commit.getName(), accepted.getName()); + logger + .atFine() + .log( + "Dependency %s merged into branch head %s.", + commit.getName(), accepted.getName()); return true; } } @@ -121,8 +123,11 @@ public class RebaseSorter { for (ChangeData change : changes) { if (change.change().getStatus() == Status.MERGED && change.change().getDest().equals(dest)) { - log.debug( - "Dependency {} associated with merged change {}.", commit.getName(), change.getId()); + logger + .atFine() + .log( + "Dependency %s associated with merged change %s.", + commit.getName(), change.getId()); return true; } } diff --git a/java/com/google/gerrit/server/submit/SubmitDryRun.java b/java/com/google/gerrit/server/submit/SubmitDryRun.java index a0b927af63..055e3cccce 100644 --- a/java/com/google/gerrit/server/submit/SubmitDryRun.java +++ b/java/com/google/gerrit/server/submit/SubmitDryRun.java @@ -18,6 +18,7 @@ import static java.util.stream.Collectors.toSet; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Streams; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.client.SubmitType; import com.google.gerrit.reviewdb.client.Branch; import com.google.gerrit.server.git.CodeReviewCommit; @@ -41,12 +42,10 @@ import org.eclipse.jgit.revwalk.RevFlag; import org.eclipse.jgit.revwalk.RevObject; import org.eclipse.jgit.revwalk.RevTag; import org.eclipse.jgit.revwalk.RevWalk; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Dry run of a submit strategy. */ public class SubmitDryRun { - private static final Logger log = LoggerFactory.getLogger(SubmitDryRun.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); static class Arguments { final Repository repo; @@ -135,7 +134,7 @@ public class SubmitDryRun { case INHERIT: default: String errorMsg = "No submit strategy for: " + submitType; - log.error(errorMsg); + logger.atSevere().log(errorMsg); throw new IntegrationException(errorMsg); } } diff --git a/java/com/google/gerrit/server/submit/SubmitStrategyFactory.java b/java/com/google/gerrit/server/submit/SubmitStrategyFactory.java index a2ddb16a77..2cb074462e 100644 --- a/java/com/google/gerrit/server/submit/SubmitStrategyFactory.java +++ b/java/com/google/gerrit/server/submit/SubmitStrategyFactory.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.submit; import com.google.common.collect.ListMultimap; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.api.changes.RecipientType; import com.google.gerrit.extensions.api.changes.SubmitInput; import com.google.gerrit.extensions.client.SubmitType; @@ -32,13 +33,11 @@ import com.google.inject.Singleton; import java.util.Set; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevFlag; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Factory to create a {@link SubmitStrategy} for a {@link SubmitType}. */ @Singleton public class SubmitStrategyFactory { - private static final Logger log = LoggerFactory.getLogger(SubmitStrategyFactory.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final SubmitStrategy.Arguments.Factory argsFactory; @@ -97,7 +96,7 @@ public class SubmitStrategyFactory { case INHERIT: default: String errorMsg = "No submit strategy for: " + submitType; - log.error(errorMsg); + logger.atSevere().log(errorMsg); throw new IntegrationException(errorMsg); } } diff --git a/java/com/google/gerrit/server/submit/SubmitStrategyOp.java b/java/com/google/gerrit/server/submit/SubmitStrategyOp.java index 0c6c10ecd8..48d8a63c8f 100644 --- a/java/com/google/gerrit/server/submit/SubmitStrategyOp.java +++ b/java/com/google/gerrit/server/submit/SubmitStrategyOp.java @@ -21,6 +21,7 @@ import static com.google.gerrit.server.notedb.ReviewerStateInternal.REVIEWER; import com.google.common.base.Function; import com.google.common.collect.Iterables; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.SubmitRecord; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.reviewdb.client.Branch; @@ -63,11 +64,9 @@ import org.eclipse.jgit.errors.MissingObjectException; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.transport.ReceiveCommand; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; abstract class SubmitStrategyOp implements BatchUpdateOp { - private static final Logger log = LoggerFactory.getLogger(SubmitStrategyOp.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); protected final SubmitStrategy.Arguments args; protected final CodeReviewCommit toMerge; @@ -290,7 +289,7 @@ abstract class SubmitStrategyOp implements BatchUpdateOp { setMerged(ctx, message(ctx, commit, s)); } catch (OrmException err) { String msg = "Error updating change status for " + id; - log.error(msg, err); + logger.atSevere().withCause(err).log(msg); args.commitStatus.logProblem(id, msg); // It's possible this happened before updating anything in the db, but // it's hard to know for sure, so just return true below to be safe. @@ -532,7 +531,7 @@ abstract class SubmitStrategyOp implements BatchUpdateOp { try (Repository git = args.repoManager.openRepository(getProject())) { git.setGitwebDescription(p.getProject().getDescription()); } catch (IOException e) { - log.error("cannot update description of " + p.getName(), e); + logger.atSevere().withCause(e).log("cannot update description of %s", p.getName()); } } } @@ -549,7 +548,7 @@ abstract class SubmitStrategyOp implements BatchUpdateOp { args.accountsToNotify) .sendAsync(); } catch (Exception e) { - log.error("Cannot email merged notification for " + getId(), e); + logger.atSevere().withCause(e).log("Cannot email merged notification for %s", getId()); } if (mergeResultRev != null && !args.dryrun) { args.changeMerged.fire( @@ -602,25 +601,17 @@ abstract class SubmitStrategyOp implements BatchUpdateOp { } protected final void logDebug(String msg, Object... args) { - if (log.isDebugEnabled()) { - log.debug(this.args.submissionId + msg, args); + if (logger.atFine().isEnabled()) { + logger.atFine().logVarargs(this.args.submissionId + msg, args); } } protected final void logWarn(String msg, Throwable t) { - if (log.isWarnEnabled()) { - log.warn(args.submissionId + msg, t); - } + logger.atWarning().withCause(t).log("%s%s", args.submissionId, msg); } protected void logError(String msg, Throwable t) { - if (log.isErrorEnabled()) { - if (t != null) { - log.error(args.submissionId + msg, t); - } else { - log.error(args.submissionId + msg); - } - } + logger.atSevere().withCause(t).log("%s%s", args.submissionId, msg); } protected void logError(String msg) { diff --git a/java/com/google/gerrit/server/submit/SubmoduleOp.java b/java/com/google/gerrit/server/submit/SubmoduleOp.java index 4b24275b46..e33aa95f30 100644 --- a/java/com/google/gerrit/server/submit/SubmoduleOp.java +++ b/java/com/google/gerrit/server/submit/SubmoduleOp.java @@ -19,6 +19,7 @@ import static java.util.Comparator.comparing; import com.google.common.collect.ImmutableSet; import com.google.common.collect.MultimapBuilder; import com.google.common.collect.SetMultimap; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.SubscribeSection; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.reviewdb.client.Branch; @@ -70,10 +71,9 @@ import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.transport.RefSpec; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class SubmoduleOp { + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); /** Only used for branches without code review changes */ public class GitlinkOp implements RepoOnlyOp { @@ -128,8 +128,6 @@ public class SubmoduleOp { } } - private static final Logger log = LoggerFactory.getLogger(SubmoduleOp.class); - private final GitModules.Factory gitmodulesFactory; private final PersonIdent myIdent; private final ProjectCache projectCache; @@ -679,8 +677,8 @@ public class SubmoduleOp { } private void logDebug(String msg, Object... args) { - if (log.isDebugEnabled()) { - log.debug(orm.getSubmissionId() + msg, args); + if (logger.atFine().isEnabled()) { + logger.atFine().logVarargs(orm.getSubmissionId() + " " + msg, args); } } } diff --git a/java/com/google/gerrit/server/submit/TestHelperOp.java b/java/com/google/gerrit/server/submit/TestHelperOp.java index b3a82de1df..d9304a0ba6 100644 --- a/java/com/google/gerrit/server/submit/TestHelperOp.java +++ b/java/com/google/gerrit/server/submit/TestHelperOp.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.submit; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.server.change.TestSubmitInput; import com.google.gerrit.server.update.BatchUpdateOp; @@ -22,11 +23,9 @@ import com.google.gerrit.server.util.RequestId; import java.io.IOException; import java.util.Queue; import org.eclipse.jgit.lib.ObjectId; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; class TestHelperOp implements BatchUpdateOp { - private static final Logger log = LoggerFactory.getLogger(TestHelperOp.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final Change.Id changeId; private final TestSubmitInput input; @@ -51,8 +50,8 @@ class TestHelperOp implements BatchUpdateOp { } private void logDebug(String msg, Object... args) { - if (log.isDebugEnabled()) { - log.debug(submissionId + msg, args); + if (logger.atFine().isEnabled()) { + logger.atFine().logVarargs(submissionId + msg, args); } } } diff --git a/java/com/google/gerrit/server/tools/ToolsCatalog.java b/java/com/google/gerrit/server/tools/ToolsCatalog.java index b616791af5..aaa366ca17 100644 --- a/java/com/google/gerrit/server/tools/ToolsCatalog.java +++ b/java/com/google/gerrit/server/tools/ToolsCatalog.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.tools; import static java.nio.charset.StandardCharsets.UTF_8; import com.google.common.base.Strings; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.common.Version; import com.google.inject.Inject; @@ -34,8 +35,6 @@ import java.util.SortedMap; import java.util.TreeMap; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.util.RawParseUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Listing of all client side tools stored on this server. @@ -45,7 +44,7 @@ import org.slf4j.LoggerFactory; */ @Singleton public class ToolsCatalog { - private static final Logger log = LoggerFactory.getLogger(ToolsCatalog.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final SortedMap toc; @@ -127,7 +126,7 @@ public class ToolsCatalog { } return out.toByteArray(); } catch (Exception e) { - log.debug("Cannot read " + path, e); + logger.atFine().withCause(e).log("Cannot read %s", path); return null; } } diff --git a/java/com/google/gerrit/server/update/BatchUpdate.java b/java/com/google/gerrit/server/update/BatchUpdate.java index 549b134458..e665b7abc2 100644 --- a/java/com/google/gerrit/server/update/BatchUpdate.java +++ b/java/com/google/gerrit/server/update/BatchUpdate.java @@ -25,6 +25,7 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ListMultimap; import com.google.common.collect.MultimapBuilder; import com.google.common.collect.Multiset; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.extensions.config.FactoryModule; import com.google.gerrit.extensions.restapi.ResourceConflictException; @@ -62,8 +63,6 @@ import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.transport.PushCertificate; import org.eclipse.jgit.transport.ReceiveCommand; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Helper for a set of updates that should be applied for a site. @@ -88,7 +87,7 @@ import org.slf4j.LoggerFactory; * successfully before proceeding to the next phase. */ public abstract class BatchUpdate implements AutoCloseable { - private static final Logger log = LoggerFactory.getLogger(BatchUpdate.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static Module module() { return new FactoryModule() { @@ -386,8 +385,8 @@ public abstract class BatchUpdate implements AutoCloseable { } protected void logDebug(String msg, Throwable t) { - if (requestId != null && log.isDebugEnabled()) { - log.debug(requestId + msg, t); + if (requestId != null && logger.atFine().isEnabled()) { + logger.atFine().withCause(t).log(requestId + "%s", msg); } } @@ -395,8 +394,8 @@ public abstract class BatchUpdate implements AutoCloseable { // Only log if there is a requestId assigned, since those are the // expensive/complicated requests like MergeOp. Doing it every time would be // noisy. - if (requestId != null && log.isDebugEnabled()) { - log.debug(requestId + msg, args); + if (requestId != null && logger.atFine().isEnabled()) { + logger.atFine().logVarargs(requestId + msg, args); } } } diff --git a/java/com/google/gerrit/server/update/ReviewDbBatchUpdate.java b/java/com/google/gerrit/server/update/ReviewDbBatchUpdate.java index 9cdb0064ca..97db475875 100644 --- a/java/com/google/gerrit/server/update/ReviewDbBatchUpdate.java +++ b/java/com/google/gerrit/server/update/ReviewDbBatchUpdate.java @@ -23,6 +23,7 @@ import static java.util.stream.Collectors.toList; import com.google.common.base.Stopwatch; import com.google.common.base.Throwables; import com.google.common.collect.ImmutableList; +import com.google.common.flogger.FluentLogger; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListeningExecutorService; @@ -82,8 +83,6 @@ import org.eclipse.jgit.lib.PersonIdent; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.transport.ReceiveCommand; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * {@link BatchUpdate} implementation that supports mixed ReviewDb/NoteDb operations, depending on @@ -102,7 +101,7 @@ import org.slf4j.LoggerFactory; * attempt to reimplement this logic. Use {@code BatchUpdate} if at all possible. */ public class ReviewDbBatchUpdate extends BatchUpdate { - private static final Logger log = LoggerFactory.getLogger(ReviewDbBatchUpdate.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public interface AssistedFactory { ReviewDbBatchUpdate create( @@ -579,7 +578,7 @@ public class ReviewDbBatchUpdate extends BatchUpdate { // rebuilt the next time it is needed. // // Always log even without RequestId. - log.debug("Ignoring NoteDb update error after ReviewDb write", e); + logger.atFine().withCause(e).log("Ignoring NoteDb update error after ReviewDb write"); // Otherwise, we can't prove it's safe to ignore the error, either because some change had // NOTE_DB primary, or a task failed before determining the primary storage. @@ -732,7 +731,7 @@ public class ReviewDbBatchUpdate extends BatchUpdate { // already written the NoteDbChangeState to ReviewDb, which means // if the state is out of date it will be rebuilt the next time it // is needed. - log.debug("Ignoring NoteDb update error after ReviewDb write", ex); + logger.atFine().withCause(ex).log("Ignoring NoteDb update error after ReviewDb write"); } } } catch (Exception e) { @@ -827,14 +826,14 @@ public class ReviewDbBatchUpdate extends BatchUpdate { } private void logDebug(String msg, Throwable t) { - if (log.isDebugEnabled()) { - ReviewDbBatchUpdate.this.logDebug("[" + taskId + "]" + msg, t); + if (logger.atFine().isEnabled()) { + ReviewDbBatchUpdate.this.logDebug("[" + taskId + "] " + msg, t); } } private void logDebug(String msg, Object... args) { - if (log.isDebugEnabled()) { - ReviewDbBatchUpdate.this.logDebug("[" + taskId + "]" + msg, args); + if (logger.atFine().isEnabled()) { + ReviewDbBatchUpdate.this.logDebug("[" + taskId + "] " + msg, args); } } } diff --git a/java/com/google/gerrit/server/util/MagicBranch.java b/java/com/google/gerrit/server/util/MagicBranch.java index e757d77a63..3ce87a41e0 100644 --- a/java/com/google/gerrit/server/util/MagicBranch.java +++ b/java/com/google/gerrit/server/util/MagicBranch.java @@ -14,17 +14,16 @@ package com.google.gerrit.server.util; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.Capable; import com.google.gerrit.reviewdb.client.Project; import java.io.IOException; import java.util.Map; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Repository; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public final class MagicBranch { - private static final Logger log = LoggerFactory.getLogger(MagicBranch.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static final String NEW_CHANGE = "refs/for/"; // TODO(xchangcheng): remove after 'repo' supports private/wip changes. @@ -95,16 +94,16 @@ public final class MagicBranch { blockingFors = repo.getRefDatabase().getRefs(branchName); } catch (IOException err) { String projName = project.getName(); - log.warn("Cannot scan refs in '" + projName + "'", err); + logger.atWarning().withCause(err).log("Cannot scan refs in '%s'", projName); return new Capable("Server process cannot read '" + projName + "'"); } if (!blockingFors.isEmpty()) { String projName = project.getName(); - log.error( - "Repository '" - + projName - + "' needs the following refs removed to receive changes: " - + blockingFors.keySet()); + logger + .atSevere() + .log( + "Repository '%s' needs the following refs removed to receive changes: %s", + projName, blockingFors.keySet()); return new Capable("One or more " + branchName + " names blocks change upload"); } diff --git a/java/com/google/gerrit/server/util/SystemLog.java b/java/com/google/gerrit/server/util/SystemLog.java index e1a031766f..938cc251de 100644 --- a/java/com/google/gerrit/server/util/SystemLog.java +++ b/java/com/google/gerrit/server/util/SystemLog.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.util; import static java.nio.charset.StandardCharsets.UTF_8; import com.google.common.base.Strings; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Die; import com.google.gerrit.server.config.GerritServerConfig; import com.google.gerrit.server.config.SitePaths; @@ -35,11 +36,10 @@ import org.apache.log4j.helpers.OnlyOnceErrorHandler; import org.apache.log4j.spi.ErrorHandler; import org.apache.log4j.spi.LoggingEvent; import org.eclipse.jgit.lib.Config; -import org.slf4j.LoggerFactory; @Singleton public class SystemLog { - private static final org.slf4j.Logger log = LoggerFactory.getLogger(SystemLog.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static final String LOG4J_CONFIGURATION = "log4j.configuration"; @@ -90,8 +90,9 @@ public class SystemLog { if (appender != null) { async.addAppender(appender); } else { - log.warn( - "No appender with the name: " + name + " was found. " + name + " logging is disabled"); + logger + .atWarning() + .log("No appender with the name: %s was found. %s logging is disabled", name, name); } } async.activateOptions(); From 6dab32b4ddd93b7d0635c49b9e429b630766d385 Mon Sep 17 00:00:00 2001 From: Edwin Kempin Date: Mon, 7 May 2018 16:42:44 +0200 Subject: [PATCH 4/9] Migrate restapi classes to Flogger This is the next part of the migration to Flogger. This change migrates all classes of the 'restapi' module to Flogger. Classes of the 'httpd' and 'server' modules have been migrated by predecessor changes. Other modules continue to use slf4j. They should be migrated by follow-up changes. During this migration we try to make the log statements more consistent: - avoid string concatenation - avoid usage of String.format(...) Change-Id: I11ef03118e5c104bd2e11cb0ad9d37e09514355f Signed-off-by: Edwin Kempin --- java/com/google/gerrit/server/restapi/BUILD | 2 +- .../server/restapi/account/AddSshKey.java | 11 +-- .../server/restapi/account/CreateEmail.java | 9 ++- .../server/restapi/account/GetAgreements.java | 17 ++--- .../server/restapi/account/GetOAuthToken.java | 11 +-- .../server/restapi/account/PutPreferred.java | 25 +++---- .../restapi/account/StarredChanges.java | 7 +- .../gerrit/server/restapi/change/Abandon.java | 13 ++-- .../server/restapi/change/CherryPick.java | 11 +-- .../change/DeleteReviewerByEmailOp.java | 7 +- .../restapi/change/DeleteReviewerOp.java | 7 +- .../server/restapi/change/DeleteVote.java | 7 +- .../gerrit/server/restapi/change/Files.java | 9 ++- .../gerrit/server/restapi/change/Ignore.java | 7 +- .../server/restapi/change/MarkAsReviewed.java | 7 +- .../restapi/change/MarkAsUnreviewed.java | 7 +- .../server/restapi/change/Mergeable.java | 7 +- .../gerrit/server/restapi/change/Move.java | 18 ++--- .../restapi/change/PostReviewersOp.java | 10 +-- .../server/restapi/change/QueryChanges.java | 7 +- .../gerrit/server/restapi/change/Rebase.java | 24 ++++--- .../gerrit/server/restapi/change/Restore.java | 20 +++--- .../gerrit/server/restapi/change/Revert.java | 15 ++-- .../restapi/change/ReviewerRecommender.java | 16 ++--- .../server/restapi/change/ReviewersUtil.java | 69 ++++++++++--------- .../gerrit/server/restapi/change/Submit.java | 11 ++- .../restapi/change/SubmittedTogether.java | 7 +- .../server/restapi/change/Unignore.java | 7 +- .../server/restapi/config/AgreementJson.java | 16 ++--- .../restapi/config/ListCapabilities.java | 15 ++-- .../restapi/config/SetDiffPreferences.java | 7 +- .../restapi/config/SetEditPreferences.java | 7 +- .../server/restapi/config/SetPreferences.java | 7 +- .../server/restapi/group/ListSubgroups.java | 11 ++- .../restapi/project/CommitsCollection.java | 10 +-- .../server/restapi/project/CreateBranch.java | 7 +- .../server/restapi/project/CreateProject.java | 13 ++-- .../server/restapi/project/CreateTag.java | 7 +- .../server/restapi/project/DeleteRef.java | 13 ++-- .../server/restapi/project/GetAccess.java | 7 +- .../server/restapi/project/GetReflog.java | 7 +- .../restapi/project/ListDashboards.java | 12 ++-- .../server/restapi/project/ListProjects.java | 13 ++-- .../server/restapi/project/PutConfig.java | 26 +++---- .../server/restapi/project/SetHead.java | 7 +- 45 files changed, 276 insertions(+), 277 deletions(-) diff --git a/java/com/google/gerrit/server/restapi/BUILD b/java/com/google/gerrit/server/restapi/BUILD index 6c2a50d6e0..ff114fae82 100644 --- a/java/com/google/gerrit/server/restapi/BUILD +++ b/java/com/google/gerrit/server/restapi/BUILD @@ -29,9 +29,9 @@ java_library( "//lib/commons:codec", "//lib/commons:compress", "//lib/commons:lang", + "//lib/flogger:api", "//lib/guice", "//lib/guice:guice-assistedinject", "//lib/jgit/org.eclipse.jgit:jgit", - "//lib/log:api", ], ) diff --git a/java/com/google/gerrit/server/restapi/account/AddSshKey.java b/java/com/google/gerrit/server/restapi/account/AddSshKey.java index e2842ee284..fe83340da2 100644 --- a/java/com/google/gerrit/server/restapi/account/AddSshKey.java +++ b/java/com/google/gerrit/server/restapi/account/AddSshKey.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.restapi.account; import static java.nio.charset.StandardCharsets.UTF_8; +import com.google.common.flogger.FluentLogger; import com.google.common.io.ByteSource; import com.google.gerrit.common.errors.EmailException; import com.google.gerrit.common.errors.InvalidSshKeyException; @@ -43,12 +44,10 @@ import com.google.inject.Singleton; import java.io.IOException; import java.io.InputStream; import org.eclipse.jgit.errors.ConfigInvalidException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class AddSshKey implements RestModifyView { - private static final Logger log = LoggerFactory.getLogger(AddSshKey.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final Provider self; private final PermissionBackend permissionBackend; @@ -104,8 +103,10 @@ public class AddSshKey implements RestModifyView { try { addKeyFactory.create(user, sshKey).send(); } catch (EmailException e) { - log.error( - "Cannot send SSH key added message to " + user.getAccount().getPreferredEmail(), e); + logger + .atSevere() + .withCause(e) + .log("Cannot send SSH key added message to %s", user.getAccount().getPreferredEmail()); } user.getUserName().ifPresent(sshKeyCache::evict); diff --git a/java/com/google/gerrit/server/restapi/account/CreateEmail.java b/java/com/google/gerrit/server/restapi/account/CreateEmail.java index 7ff786057e..abc6dd9cb9 100644 --- a/java/com/google/gerrit/server/restapi/account/CreateEmail.java +++ b/java/com/google/gerrit/server/restapi/account/CreateEmail.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.restapi.account; import static com.google.gerrit.extensions.client.AuthType.DEVELOPMENT_BECOME_ANY_ACCOUNT; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.errors.EmailException; import com.google.gerrit.extensions.api.accounts.EmailInput; import com.google.gerrit.extensions.client.AccountFieldName; @@ -45,11 +46,9 @@ import com.google.inject.Provider; import com.google.inject.assistedinject.Assisted; import java.io.IOException; import org.eclipse.jgit.errors.ConfigInvalidException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class CreateEmail implements RestModifyView { - private static final Logger log = LoggerFactory.getLogger(CreateEmail.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public interface Factory { CreateEmail create(String email); @@ -126,7 +125,7 @@ public class CreateEmail implements RestModifyView info.email = email; if (input.noConfirmation || isDevMode) { if (isDevMode) { - log.warn("skipping email validation in developer mode"); + logger.atWarning().log("skipping email validation in developer mode"); } try { accountManager.link(user.getAccountId(), AuthRequest.forEmail(email)); @@ -146,7 +145,7 @@ public class CreateEmail implements RestModifyView sender.send(); info.pendingConfirmation = true; } catch (EmailException | RuntimeException e) { - log.error("Cannot send email verification message to " + email, e); + logger.atSevere().withCause(e).log("Cannot send email verification message to %s", email); throw e; } } diff --git a/java/com/google/gerrit/server/restapi/account/GetAgreements.java b/java/com/google/gerrit/server/restapi/account/GetAgreements.java index 719cb219c3..3573d7ee57 100644 --- a/java/com/google/gerrit/server/restapi/account/GetAgreements.java +++ b/java/com/google/gerrit/server/restapi/account/GetAgreements.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.restapi.account; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.ContributorAgreement; import com.google.gerrit.common.data.PermissionRule; import com.google.gerrit.common.data.PermissionRule.Action; @@ -36,12 +37,10 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class GetAgreements implements RestReadView { - private static final Logger log = LoggerFactory.getLogger(GetAgreements.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final Provider self; private final ProjectCache projectCache; @@ -85,13 +84,11 @@ public class GetAgreements implements RestReadView { if (rule.getGroup().getUUID() != null) { groupIds.add(rule.getGroup().getUUID()); } else { - log.warn( - "group \"" - + rule.getGroup().getName() - + "\" does not " - + "exist, referenced in CLA \"" - + ca.getName() - + "\""); + logger + .atWarning() + .log( + "group \"%s\" does not exist, referenced in CLA \"%s\"", + rule.getGroup().getName(), ca.getName()); } } } diff --git a/java/com/google/gerrit/server/restapi/account/GetOAuthToken.java b/java/com/google/gerrit/server/restapi/account/GetOAuthToken.java index 93330a028f..1043cb7911 100644 --- a/java/com/google/gerrit/server/restapi/account/GetOAuthToken.java +++ b/java/com/google/gerrit/server/restapi/account/GetOAuthToken.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.restapi.account; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.auth.oauth.OAuthToken; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; @@ -27,14 +28,12 @@ import com.google.inject.Provider; import com.google.inject.Singleton; import java.net.URI; import java.net.URISyntaxException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton class GetOAuthToken implements RestReadView { + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final String BEARER_TYPE = "bearer"; - private static final Logger log = LoggerFactory.getLogger(GetOAuthToken.class); private final Provider self; private final OAuthTokenCache tokenCache; @@ -72,14 +71,16 @@ class GetOAuthToken implements RestReadView { private static String getHostName(String canonicalWebUrl) { if (canonicalWebUrl == null) { - log.error("No canonicalWebUrl defined in gerrit.config, OAuth may not work properly"); + logger + .atSevere() + .log("No canonicalWebUrl defined in gerrit.config, OAuth may not work properly"); return null; } try { return new URI(canonicalWebUrl).getHost(); } catch (URISyntaxException e) { - log.error("Invalid canonicalWebUrl '" + canonicalWebUrl + "'", e); + logger.atSevere().withCause(e).log("Invalid canonicalWebUrl '%s'", canonicalWebUrl); return null; } } diff --git a/java/com/google/gerrit/server/restapi/account/PutPreferred.java b/java/com/google/gerrit/server/restapi/account/PutPreferred.java index 65285c39a4..8b770cbb0d 100644 --- a/java/com/google/gerrit/server/restapi/account/PutPreferred.java +++ b/java/com/google/gerrit/server/restapi/account/PutPreferred.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.restapi.account; import static java.util.stream.Collectors.toList; import static java.util.stream.Collectors.toSet; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.common.Input; import com.google.gerrit.extensions.restapi.ResourceConflictException; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; @@ -44,12 +45,10 @@ import java.util.Set; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; import org.eclipse.jgit.errors.ConfigInvalidException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class PutPreferred implements RestModifyView { - private static final Logger log = LoggerFactory.getLogger(PutPreferred.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final Provider self; private final PermissionBackend permissionBackend; @@ -117,15 +116,17 @@ public class PutPreferred implements RestModifyView, AcceptsCreate { - private static final Logger log = LoggerFactory.getLogger(StarredChanges.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final ChangesCollection changes; private final DynamicMap> views; @@ -110,7 +109,7 @@ public class StarredChanges } catch (ResourceNotFoundException e) { throw new UnprocessableEntityException(String.format("change %s not found", id.get())); } catch (OrmException | PermissionBackendException | IOException e) { - log.error("cannot resolve change", e); + logger.atSevere().withCause(e).log("cannot resolve change"); throw new UnprocessableEntityException("internal server error"); } } diff --git a/java/com/google/gerrit/server/restapi/change/Abandon.java b/java/com/google/gerrit/server/restapi/change/Abandon.java index 116cbdb5cb..7831277a2c 100644 --- a/java/com/google/gerrit/server/restapi/change/Abandon.java +++ b/java/com/google/gerrit/server/restapi/change/Abandon.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.restapi.change; import com.google.common.collect.ImmutableListMultimap; import com.google.common.collect.ListMultimap; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.TimeUtil; import com.google.gerrit.extensions.api.changes.AbandonInput; import com.google.gerrit.extensions.api.changes.NotifyHandling; @@ -46,13 +47,11 @@ import com.google.inject.Provider; import com.google.inject.Singleton; import java.io.IOException; import org.eclipse.jgit.errors.ConfigInvalidException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class Abandon extends RetryingRestModifyView implements UiAction { - private static final Logger log = LoggerFactory.getLogger(Abandon.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final Provider dbProvider; private final ChangeJson.Factory json; @@ -160,10 +159,10 @@ public class Abandon extends RetryingRestModifyView implements UiAction { - private static final Logger log = LoggerFactory.getLogger(CherryPick.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + private final PermissionBackend permissionBackend; private final CherryPickChange cherryPickChange; private final ChangeJson.Factory json; @@ -120,7 +120,10 @@ public class CherryPick try { projectStatePermitsWrite = projectCache.checkedGet(rsrc.getProject()).statePermitsWrite(); } catch (IOException e) { - log.error("Failed to check if project state permits write: " + rsrc.getProject(), e); + logger + .atSevere() + .withCause(e) + .log("Failed to check if project state permits write: %s", rsrc.getProject()); } return new UiAction.Description() .setLabel("Cherry Pick") diff --git a/java/com/google/gerrit/server/restapi/change/DeleteReviewerByEmailOp.java b/java/com/google/gerrit/server/restapi/change/DeleteReviewerByEmailOp.java index f06709d199..fac1003d89 100644 --- a/java/com/google/gerrit/server/restapi/change/DeleteReviewerByEmailOp.java +++ b/java/com/google/gerrit/server/restapi/change/DeleteReviewerByEmailOp.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.restapi.change; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.api.changes.DeleteReviewerInput; import com.google.gerrit.extensions.api.changes.NotifyHandling; import com.google.gerrit.reviewdb.client.Change; @@ -30,11 +31,9 @@ import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import com.google.inject.assistedinject.Assisted; import java.util.Collections; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class DeleteReviewerByEmailOp implements BatchUpdateOp { - private static final Logger log = LoggerFactory.getLogger(DeleteReviewerByEmailOp.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public interface Factory { DeleteReviewerByEmailOp create(Address reviewer, DeleteReviewerInput input); @@ -100,7 +99,7 @@ public class DeleteReviewerByEmailOp implements BatchUpdateOp { cm.setAccountsToNotify(notifyUtil.resolveAccounts(input.notifyDetails)); cm.send(); } catch (Exception err) { - log.error("Cannot email update for change " + change.getId(), err); + logger.atSevere().withCause(err).log("Cannot email update for change %s", change.getId()); } } } diff --git a/java/com/google/gerrit/server/restapi/change/DeleteReviewerOp.java b/java/com/google/gerrit/server/restapi/change/DeleteReviewerOp.java index 39380349c4..91f5d15b0e 100644 --- a/java/com/google/gerrit/server/restapi/change/DeleteReviewerOp.java +++ b/java/com/google/gerrit/server/restapi/change/DeleteReviewerOp.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.restapi.change; import com.google.common.collect.Iterables; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.LabelType; import com.google.gerrit.common.data.LabelTypes; import com.google.gerrit.extensions.api.changes.DeleteReviewerInput; @@ -57,11 +58,9 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class DeleteReviewerOp implements BatchUpdateOp { - private static final Logger log = LoggerFactory.getLogger(DeleteReviewerOp.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public interface Factory { DeleteReviewerOp create(AccountState reviewerAccount, DeleteReviewerInput input); @@ -248,7 +247,7 @@ public class DeleteReviewerOp implements BatchUpdateOp { cm.setAccountsToNotify(notifyUtil.resolveAccounts(input.notifyDetails)); cm.send(); } catch (Exception err) { - log.error("Cannot email update for change " + change.getId(), err); + logger.atSevere().withCause(err).log("Cannot email update for change %s", change.getId()); } } } diff --git a/java/com/google/gerrit/server/restapi/change/DeleteVote.java b/java/com/google/gerrit/server/restapi/change/DeleteVote.java index b8229ac42a..f268a30c80 100644 --- a/java/com/google/gerrit/server/restapi/change/DeleteVote.java +++ b/java/com/google/gerrit/server/restapi/change/DeleteVote.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.restapi.change; import static com.google.common.base.Preconditions.checkNotNull; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.TimeUtil; import com.google.gerrit.common.data.LabelTypes; import com.google.gerrit.extensions.api.changes.DeleteVoteInput; @@ -64,12 +65,10 @@ import java.io.IOException; import java.util.Collections; import java.util.HashMap; import java.util.Map; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class DeleteVote extends RetryingRestModifyView> { - private static final Logger log = LoggerFactory.getLogger(DeleteVote.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final Provider db; private final ApprovalsUtil approvalsUtil; @@ -252,7 +251,7 @@ public class DeleteVote extends RetryingRestModifyView { @@ -100,7 +99,7 @@ public class Files implements ChildCollection { } public static final class ListFiles implements ETagView { - private static final Logger log = LoggerFactory.getLogger(ListFiles.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); @Option(name = "--base", metaVar = "revision-id") String base; @@ -248,9 +247,9 @@ public class Files implements ChildCollection { try { return copy(res.files(), res.patchSetId(), resource, userId); } catch (PatchListObjectTooLargeException e) { - log.warn("Cannot copy patch review flags: " + e.getMessage()); + logger.atWarning().log("Cannot copy patch review flags: %s", e.getMessage()); } catch (IOException | PatchListNotAvailableException e) { - log.warn("Cannot copy patch review flags", e); + logger.atWarning().withCause(e).log("Cannot copy patch review flags"); } } diff --git a/java/com/google/gerrit/server/restapi/change/Ignore.java b/java/com/google/gerrit/server/restapi/change/Ignore.java index d71053982b..e31945171a 100644 --- a/java/com/google/gerrit/server/restapi/change/Ignore.java +++ b/java/com/google/gerrit/server/restapi/change/Ignore.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.restapi.change; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.common.Input; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.ResourceConflictException; @@ -28,12 +29,10 @@ import com.google.gerrit.server.change.ChangeResource; import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import com.google.inject.Singleton; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class Ignore implements RestModifyView, UiAction { - private static final Logger log = LoggerFactory.getLogger(Ignore.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final StarredChangesUtil stars; @@ -75,7 +74,7 @@ public class Ignore implements RestModifyView, UiAction, UiAction { - private static final Logger log = LoggerFactory.getLogger(MarkAsReviewed.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final Provider dbProvider; private final ChangeData.Factory changeDataFactory; @@ -71,7 +70,7 @@ public class MarkAsReviewed .create(dbProvider.get(), rsrc.getNotes()) .isReviewedBy(rsrc.getUser().asIdentifiedUser().getAccountId()); } catch (OrmException e) { - log.error("failed to check if change is reviewed", e); + logger.atSevere().withCause(e).log("failed to check if change is reviewed"); } return false; } diff --git a/java/com/google/gerrit/server/restapi/change/MarkAsUnreviewed.java b/java/com/google/gerrit/server/restapi/change/MarkAsUnreviewed.java index 2e74d61152..6e15dcc486 100644 --- a/java/com/google/gerrit/server/restapi/change/MarkAsUnreviewed.java +++ b/java/com/google/gerrit/server/restapi/change/MarkAsUnreviewed.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.restapi.change; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.common.Input; import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestModifyView; @@ -27,13 +28,11 @@ import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.Singleton; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class MarkAsUnreviewed implements RestModifyView, UiAction { - private static final Logger log = LoggerFactory.getLogger(MarkAsUnreviewed.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final Provider dbProvider; private final ChangeData.Factory changeDataFactory; @@ -70,7 +69,7 @@ public class MarkAsUnreviewed .create(dbProvider.get(), rsrc.getNotes()) .isReviewedBy(rsrc.getUser().asIdentifiedUser().getAccountId()); } catch (OrmException e) { - log.error("failed to check if change is reviewed", e); + logger.atSevere().withCause(e).log("failed to check if change is reviewed"); } return false; } diff --git a/java/com/google/gerrit/server/restapi/change/Mergeable.java b/java/com/google/gerrit/server/restapi/change/Mergeable.java index 4f8064b474..d7ede051b5 100644 --- a/java/com/google/gerrit/server/restapi/change/Mergeable.java +++ b/java/com/google/gerrit/server/restapi/change/Mergeable.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.restapi.change; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.SubmitTypeRecord; import com.google.gerrit.extensions.client.SubmitType; import com.google.gerrit.extensions.common.MergeableInfo; @@ -51,11 +52,9 @@ import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Repository; import org.kohsuke.args4j.Option; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class Mergeable implements RestReadView { - private static final Logger log = LoggerFactory.getLogger(Mergeable.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); @Option( name = "--other-branches", @@ -176,7 +175,7 @@ public class Mergeable implements RestReadView { try { return ObjectId.fromString(ps.getRevision().get()); } catch (IllegalArgumentException e) { - log.error("Invalid revision on patch set " + ps); + logger.atSevere().log("Invalid revision on patch set %s", ps); return null; } } diff --git a/java/com/google/gerrit/server/restapi/change/Move.java b/java/com/google/gerrit/server/restapi/change/Move.java index 6e04943880..a5e5dc00c8 100644 --- a/java/com/google/gerrit/server/restapi/change/Move.java +++ b/java/com/google/gerrit/server/restapi/change/Move.java @@ -20,6 +20,7 @@ import static com.google.gerrit.server.permissions.RefPermission.CREATE_CHANGE; import static com.google.gerrit.server.query.change.ChangeData.asChanges; import com.google.common.base.Strings; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.TimeUtil; import com.google.gerrit.common.data.LabelType; import com.google.gerrit.extensions.api.changes.MoveInput; @@ -70,13 +71,11 @@ import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevWalk; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class Move extends RetryingRestModifyView implements UiAction { - private static final Logger log = LoggerFactory.getLogger(Move.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final PermissionBackend permissionBackend; private final Provider dbProvider; @@ -298,7 +297,10 @@ public class Move extends RetryingRestModifyView { - private static final Logger log = LoggerFactory.getLogger(QueryChanges.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final ChangeJson.Factory json; private final ChangeQueryBuilder qb; @@ -115,7 +114,7 @@ public class QueryChanges implements RestReadView { } catch (QueryRequiresAuthException e) { throw new AuthException("Must be signed-in to use this operator"); } catch (QueryParseException e) { - log.debug("Reject change query with 400 Bad Request: " + queries, e); + logger.atFine().withCause(e).log("Reject change query with 400 Bad Request: %s", queries); throw new BadRequestException(e.getMessage(), e); } return out.size() == 1 ? out.get(0) : out; diff --git a/java/com/google/gerrit/server/restapi/change/Rebase.java b/java/com/google/gerrit/server/restapi/change/Rebase.java index 02e7c18e62..9c2b596024 100644 --- a/java/com/google/gerrit/server/restapi/change/Rebase.java +++ b/java/com/google/gerrit/server/restapi/change/Rebase.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.restapi.change; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.TimeUtil; import com.google.gerrit.extensions.api.changes.RebaseInput; import com.google.gerrit.extensions.client.ListChangesOption; @@ -60,13 +61,12 @@ import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevWalk; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class Rebase extends RetryingRestModifyView implements RestModifyView, UiAction { - private static final Logger log = LoggerFactory.getLogger(Rebase.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + private static final ImmutableSet OPTIONS = Sets.immutableEnumSet(ListChangesOption.CURRENT_REVISION, ListChangesOption.CURRENT_COMMIT); @@ -222,7 +222,10 @@ public class Rebase extends RetryingRestModifyView implements UiAction { - private static final Logger log = LoggerFactory.getLogger(Restore.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final RestoredSender.Factory restoredSenderFactory; private final Provider dbProvider; @@ -153,7 +152,7 @@ public class Restore extends RetryingRestModifyView implements UiAction { - private static final Logger log = LoggerFactory.getLogger(Revert.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final Provider db; private final PermissionBackend permissionBackend; @@ -265,7 +264,10 @@ public class Revert extends RetryingRestModifyView candidateList = new ArrayList<>(); if (!Strings.isNullOrEmpty(query)) { candidateList = suggestAccounts(suggestReviewers); - log.debug("Candidate list: {}", candidateList); + logger.atFine().log("Candidate list: %s", candidateList); } List sortedRecommendations = recommendAccounts(changeNotes, suggestReviewers, projectState, candidateList); - log.debug("Sorted recommendations: {}", sortedRecommendations); + logger.atFine().log("Sorted recommendations: %s", sortedRecommendations); // Filter accounts by visibility and enforce limit List filteredRecommendations = new ArrayList<>(); @@ -214,7 +215,7 @@ public class ReviewersUtil { } } } - log.debug("Filtered recommendations: {}", filteredRecommendations); + logger.atFine().log("Filtered recommendations: %s", filteredRecommendations); List suggestedReviewers = loadAccounts(filteredRecommendations); if (!excludeGroups && suggestedReviewers.size() < limit && !Strings.isNullOrEmpty(query)) { @@ -230,23 +231,25 @@ public class ReviewersUtil { if (suggestedReviewers.size() > limit) { suggestedReviewers = suggestedReviewers.subList(0, limit); - log.debug("Limited suggested reviewers to {} accounts.", limit); + logger.atFine().log("Limited suggested reviewers to %d accounts.", limit); } - log.debug( - "Suggested reviewers: {}", - suggestedReviewers - .stream() - .map( - r -> { - if (r.account != null) { - return "a/" + r.account._accountId; - } else if (r.group != null) { - return "g/" + r.group.id; - } else { - return ""; - } - }) - .collect(toList())); + logger + .atFine() + .log( + "Suggested reviewers: %s", + suggestedReviewers + .stream() + .map( + r -> { + if (r.account != null) { + return "a/" + r.account._accountId; + } else if (r.group != null) { + return "g/" + r.group.id; + } else { + return ""; + } + }) + .collect(toList())); return suggestedReviewers; } diff --git a/java/com/google/gerrit/server/restapi/change/Submit.java b/java/com/google/gerrit/server/restapi/change/Submit.java index 51a4090a78..a161767a21 100644 --- a/java/com/google/gerrit/server/restapi/change/Submit.java +++ b/java/com/google/gerrit/server/restapi/change/Submit.java @@ -21,6 +21,7 @@ import com.google.common.base.Strings; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ListMultimap; import com.google.common.collect.Sets; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.ParameterizedString; import com.google.gerrit.extensions.api.changes.SubmitInput; import com.google.gerrit.extensions.common.ChangeInfo; @@ -79,13 +80,11 @@ import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevWalk; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class Submit implements RestModifyView, UiAction { - private static final Logger log = LoggerFactory.getLogger(Submit.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final String DEFAULT_TOOLTIP = "Submit patch set ${patchSet} into ${branch}"; private static final String DEFAULT_TOOLTIP_ANCESTORS = @@ -293,7 +292,7 @@ public class Submit + unmergeable.stream().map(c -> c.getId().toString()).collect(joining(", ")); } } catch (PermissionBackendException | OrmException | IOException e) { - log.error("Error checking if change is submittable", e); + logger.atSevere().withCause(e).log("Error checking if change is submittable"); throw new OrmRuntimeException("Could not determine problems for the change", e); } return null; @@ -314,7 +313,7 @@ public class Submit return null; // submit not visible } } catch (IOException e) { - log.error("Error checking if change is submittable", e); + logger.atSevere().withCause(e).log("Error checking if change is submittable"); throw new OrmRuntimeException("Could not determine problems for the change", e); } @@ -325,7 +324,7 @@ public class Submit } catch (ResourceConflictException e) { return null; // submit not visible } catch (OrmException e) { - log.error("Error checking if change is submittable", e); + logger.atSevere().withCause(e).log("Error checking if change is submittable"); throw new OrmRuntimeException("Could not determine problems for the change", e); } diff --git a/java/com/google/gerrit/server/restapi/change/SubmittedTogether.java b/java/com/google/gerrit/server/restapi/change/SubmittedTogether.java index bbfe75d3ab..4ced4c20fc 100644 --- a/java/com/google/gerrit/server/restapi/change/SubmittedTogether.java +++ b/java/com/google/gerrit/server/restapi/change/SubmittedTogether.java @@ -18,6 +18,7 @@ import static com.google.gerrit.extensions.api.changes.SubmittedTogetherOption.N import static java.util.Collections.reverseOrder; import static java.util.stream.Collectors.toList; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.api.changes.SubmittedTogetherInfo; import com.google.gerrit.extensions.api.changes.SubmittedTogetherOption; import com.google.gerrit.extensions.client.ChangeStatus; @@ -47,11 +48,9 @@ import java.util.Comparator; import java.util.EnumSet; import java.util.List; import org.kohsuke.args4j.Option; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class SubmittedTogether implements RestReadView { - private static final Logger log = LoggerFactory.getLogger(SubmittedTogether.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final EnumSet options = EnumSet.noneOf(SubmittedTogetherOption.class); @@ -155,7 +154,7 @@ public class SubmittedTogether implements RestReadView { info.nonVisibleChanges = hidden; return info; } catch (OrmException | IOException e) { - log.error("Error on getting a ChangeSet", e); + logger.atSevere().withCause(e).log("Error on getting a ChangeSet"); throw e; } } diff --git a/java/com/google/gerrit/server/restapi/change/Unignore.java b/java/com/google/gerrit/server/restapi/change/Unignore.java index d1be31259a..6f2144ad1a 100644 --- a/java/com/google/gerrit/server/restapi/change/Unignore.java +++ b/java/com/google/gerrit/server/restapi/change/Unignore.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.restapi.change; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.common.Input; import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestModifyView; @@ -24,12 +25,10 @@ import com.google.gerrit.server.change.ChangeResource; import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import com.google.inject.Singleton; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class Unignore implements RestModifyView, UiAction { - private static final Logger log = LoggerFactory.getLogger(Unignore.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final StarredChangesUtil stars; @@ -59,7 +58,7 @@ public class Unignore implements RestModifyView, UiAction try { return stars.isIgnored(rsrc); } catch (OrmException e) { - log.error("failed to check ignored star", e); + logger.atSevere().withCause(e).log("failed to check ignored star"); } return false; } diff --git a/java/com/google/gerrit/server/restapi/config/AgreementJson.java b/java/com/google/gerrit/server/restapi/config/AgreementJson.java index 3ad965db6d..6c5e70b947 100644 --- a/java/com/google/gerrit/server/restapi/config/AgreementJson.java +++ b/java/com/google/gerrit/server/restapi/config/AgreementJson.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.restapi.config; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.ContributorAgreement; import com.google.gerrit.common.data.GroupReference; import com.google.gerrit.common.errors.NoSuchGroupException; @@ -26,11 +27,9 @@ import com.google.gerrit.server.restapi.group.GroupJson; import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import com.google.inject.Provider; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class AgreementJson { - private static final Logger log = LoggerFactory.getLogger(AgreementJson.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final Provider self; private final IdentifiedUser.GenericFactory identifiedUserFactory; @@ -62,12 +61,11 @@ public class AgreementJson { GroupResource group = new GroupResource(gc); info.autoVerifyGroup = groupJson.format(group); } catch (NoSuchGroupException | OrmException e) { - log.warn( - "autoverify group \"" - + autoVerifyGroup.getName() - + "\" does not exist, referenced in CLA \"" - + ca.getName() - + "\""); + logger + .atWarning() + .log( + "autoverify group \"%s\" does not exist, referenced in CLA \"%s\"", + autoVerifyGroup.getName(), ca.getName()); } } return info; diff --git a/java/com/google/gerrit/server/restapi/config/ListCapabilities.java b/java/com/google/gerrit/server/restapi/config/ListCapabilities.java index 412b88dc6f..8d6d9bd96f 100644 --- a/java/com/google/gerrit/server/restapi/config/ListCapabilities.java +++ b/java/com/google/gerrit/server/restapi/config/ListCapabilities.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.restapi.config; import com.google.common.collect.ImmutableMap; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.GlobalCapability; import com.google.gerrit.extensions.config.CapabilityDefinition; import com.google.gerrit.extensions.registration.DynamicMap; @@ -29,13 +30,12 @@ import com.google.inject.Singleton; import java.util.HashMap; import java.util.Map; import java.util.regex.Pattern; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** List capabilities visible to the calling user. */ @Singleton public class ListCapabilities implements RestReadView { - private static final Logger log = LoggerFactory.getLogger(ListCapabilities.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + private static final Pattern PLUGIN_NAME_PATTERN = Pattern.compile("^[a-zA-Z0-9-]+$"); private final PermissionBackend permissionBackend; @@ -62,10 +62,11 @@ public class ListCapabilities implements RestReadView { Map output = new HashMap<>(); for (String pluginName : pluginCapabilities.plugins()) { if (!PLUGIN_NAME_PATTERN.matcher(pluginName).matches()) { - log.warn( - "Plugin name '{}' must match '{}' to use capabilities; rename the plugin", - pluginName, - PLUGIN_NAME_PATTERN.pattern()); + logger + .atWarning() + .log( + "Plugin name '%s' must match '%s' to use capabilities; rename the plugin", + pluginName, PLUGIN_NAME_PATTERN.pattern()); continue; } for (Map.Entry> entry : diff --git a/java/com/google/gerrit/server/restapi/config/SetDiffPreferences.java b/java/com/google/gerrit/server/restapi/config/SetDiffPreferences.java index 5e549c20de..068f3326c5 100644 --- a/java/com/google/gerrit/server/restapi/config/SetDiffPreferences.java +++ b/java/com/google/gerrit/server/restapi/config/SetDiffPreferences.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.restapi.config; import static com.google.gerrit.server.config.ConfigUtil.skipField; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.GlobalCapability; import com.google.gerrit.extensions.annotations.RequiresCapability; import com.google.gerrit.extensions.client.DiffPreferencesInfo; @@ -32,13 +33,11 @@ import com.google.inject.Singleton; import java.io.IOException; import java.lang.reflect.Field; import org.eclipse.jgit.errors.ConfigInvalidException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @RequiresCapability(GlobalCapability.ADMINISTRATE_SERVER) @Singleton public class SetDiffPreferences implements RestModifyView { - private static final Logger log = LoggerFactory.getLogger(SetDiffPreferences.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final Provider metaDataUpdateFactory; private final AllUsersName allUsersName; @@ -82,7 +81,7 @@ public class SetDiffPreferences implements RestModifyView { - private static final Logger log = LoggerFactory.getLogger(SetDiffPreferences.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final Provider metaDataUpdateFactory; private final AllUsersName allUsersName; @@ -82,7 +81,7 @@ public class SetEditPreferences implements RestModifyView { - private static final Logger log = LoggerFactory.getLogger(SetPreferences.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final Provider metaDataUpdateFactory; private final AllUsersName allUsersName; @@ -79,7 +78,7 @@ public class SetPreferences implements RestModifyView { - private static final Logger log = LoggerFactory.getLogger(ListSubgroups.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final GroupControl.Factory controlFactory; private final GroupJson json; @@ -65,9 +64,9 @@ public class ListSubgroups implements RestReadView { included.add(json.format(i.getGroup())); } } catch (NoSuchGroupException notFound) { - log.warn( - String.format( - "Group %s no longer available, subgroup of %s", subgroupUuid, group.getName())); + logger + .atWarning() + .log("Group %s no longer available, subgroup of %s", subgroupUuid, group.getName()); continue; } } diff --git a/java/com/google/gerrit/server/restapi/project/CommitsCollection.java b/java/com/google/gerrit/server/restapi/project/CommitsCollection.java index 87b5343679..639c9743a2 100644 --- a/java/com/google/gerrit/server/restapi/project/CommitsCollection.java +++ b/java/com/google/gerrit/server/restapi/project/CommitsCollection.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.restapi.project; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.registration.DynamicMap; import com.google.gerrit.extensions.restapi.ChildCollection; import com.google.gerrit.extensions.restapi.IdString; @@ -41,12 +42,10 @@ import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevWalk; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class CommitsCollection implements ChildCollection { - private static final Logger log = LoggerFactory.getLogger(CommitsCollection.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final DynamicMap> views; private final GitRepositoryManager repoManager; @@ -118,7 +117,10 @@ public class CommitsCollection implements ChildCollection { - private static final Logger log = LoggerFactory.getLogger(CreateBranch.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public interface Factory { CreateBranch create(String ref); @@ -193,7 +192,7 @@ public class CreateBranch implements RestModifyView { + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + public interface Factory { CreateProject create(String name); } - private static final Logger log = LoggerFactory.getLogger(CreateProject.class); - private final Provider projectsCollection; private final Provider groupsCollection; private final DynamicSet projectCreationValidationListeners; @@ -275,7 +274,7 @@ public class CreateProject implements RestModifyView { - private static final Logger log = LoggerFactory.getLogger(CreateTag.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public interface Factory { CreateTag create(String ref); @@ -151,7 +150,7 @@ public class CreateTag implements RestModifyView { } catch (InvalidRevisionException e) { throw new BadRequestException("Invalid base revision"); } catch (GitAPIException e) { - log.error("Cannot create tag \"" + ref + "\"", e); + logger.atSevere().withCause(e).log("Cannot create tag \"%s\"", ref); throw new IOException(e); } } diff --git a/java/com/google/gerrit/server/restapi/project/DeleteRef.java b/java/com/google/gerrit/server/restapi/project/DeleteRef.java index 13b21c9dfc..769eaf8db6 100644 --- a/java/com/google/gerrit/server/restapi/project/DeleteRef.java +++ b/java/com/google/gerrit/server/restapi/project/DeleteRef.java @@ -21,6 +21,7 @@ import static org.eclipse.jgit.lib.Constants.R_REFS; import static org.eclipse.jgit.lib.Constants.R_TAGS; import static org.eclipse.jgit.transport.ReceiveCommand.Type.DELETE; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.ResourceConflictException; import com.google.gerrit.reviewdb.client.Branch; @@ -50,11 +51,9 @@ import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.transport.ReceiveCommand; import org.eclipse.jgit.transport.ReceiveCommand.Result; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class DeleteRef { - private static final Logger log = LoggerFactory.getLogger(DeleteRef.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final int MAX_LOCK_FAILURE_CALLS = 10; private static final long SLEEP_ON_LOCK_FAILURE_MS = 15; @@ -138,7 +137,7 @@ public class DeleteRef { } catch (LockFailedException e) { result = RefUpdate.Result.LOCK_FAILURE; } catch (IOException e) { - log.error("Cannot delete " + ref, e); + logger.atSevere().withCause(e).log("Cannot delete %s", ref); throw e; } if (result == RefUpdate.Result.LOCK_FAILURE && --remainingLockFailureCalls > 0) { @@ -162,7 +161,7 @@ public class DeleteRef { break; case REJECTED_CURRENT_BRANCH: - log.error("Cannot delete " + ref + ": " + result.name()); + logger.atSevere().log("Cannot delete %s: %s", ref, result.name()); throw new ResourceConflictException("cannot delete current branch"); case IO_FAILURE: @@ -173,7 +172,7 @@ public class DeleteRef { case REJECTED_MISSING_OBJECT: case REJECTED_OTHER_REASON: default: - log.error("Cannot delete " + ref + ": " + result.name()); + logger.atSevere().log("Cannot delete %s: %s", ref, result.name()); throw new ResourceConflictException("cannot delete: " + result.name()); } } @@ -277,7 +276,7 @@ public class DeleteRef { msg = format("Cannot delete %s: %s", cmd.getRefName(), cmd.getResult()); break; } - log.error(msg); + logger.atSevere().log(msg); errorMessages.append(msg); errorMessages.append("\n"); } diff --git a/java/com/google/gerrit/server/restapi/project/GetAccess.java b/java/com/google/gerrit/server/restapi/project/GetAccess.java index 0bcb8929f5..6a50c2f7d8 100644 --- a/java/com/google/gerrit/server/restapi/project/GetAccess.java +++ b/java/com/google/gerrit/server/restapi/project/GetAccess.java @@ -23,6 +23,7 @@ import static java.util.stream.Collectors.toMap; import com.google.common.collect.ImmutableBiMap; import com.google.common.collect.Iterables; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.AccessSection; import com.google.gerrit.common.data.GroupDescription; import com.google.gerrit.common.data.Permission; @@ -67,12 +68,10 @@ import java.util.HashSet; import java.util.Map; import org.eclipse.jgit.errors.ConfigInvalidException; import org.eclipse.jgit.errors.RepositoryNotFoundException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class GetAccess implements RestReadView { - private static final Logger LOG = LoggerFactory.getLogger(GetAccess.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static final ImmutableBiMap ACTION_TYPE = ImmutableBiMap.of( @@ -290,7 +289,7 @@ public class GetAccess implements RestReadView { group.name = basic.getName(); group.url = basic.getUrl(); } else { - LOG.warn("no such group: " + id); + logger.atWarning().log("no such group: %s", id); group = null; } groups.put(id, group); diff --git a/java/com/google/gerrit/server/restapi/project/GetReflog.java b/java/com/google/gerrit/server/restapi/project/GetReflog.java index 9bd69554f5..6075bff273 100644 --- a/java/com/google/gerrit/server/restapi/project/GetReflog.java +++ b/java/com/google/gerrit/server/restapi/project/GetReflog.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.restapi.project; import com.google.common.collect.Lists; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.api.projects.ReflogEntryInfo; import com.google.gerrit.extensions.restapi.MethodNotAllowedException; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; @@ -36,11 +37,9 @@ import org.eclipse.jgit.lib.ReflogEntry; import org.eclipse.jgit.lib.ReflogReader; import org.eclipse.jgit.lib.Repository; import org.kohsuke.args4j.Option; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class GetReflog implements RestReadView { - private static final Logger log = LoggerFactory.getLogger(GetReflog.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final GitRepositoryManager repoManager; private final PermissionBackend permissionBackend; @@ -106,7 +105,7 @@ public class GetReflog implements RestReadView { r = repo.getReflogReader(rsrc.getRef()); } catch (UnsupportedOperationException e) { String msg = "reflog not supported on repo " + rsrc.getNameKey().get(); - log.error(msg); + logger.atSevere().log(msg); throw new MethodNotAllowedException(msg); } if (r == null) { diff --git a/java/com/google/gerrit/server/restapi/project/ListDashboards.java b/java/com/google/gerrit/server/restapi/project/ListDashboards.java index 882e92238f..34f0c7b461 100644 --- a/java/com/google/gerrit/server/restapi/project/ListDashboards.java +++ b/java/com/google/gerrit/server/restapi/project/ListDashboards.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.restapi.project; import static com.google.gerrit.reviewdb.client.RefNames.REFS_DASHBOARDS; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.api.projects.DashboardInfo; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; import com.google.gerrit.extensions.restapi.RestReadView; @@ -43,11 +44,9 @@ import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.treewalk.TreeWalk; import org.kohsuke.args4j.Option; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class ListDashboards implements RestReadView { - private static final Logger log = LoggerFactory.getLogger(ListDashboards.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final GitRepositoryManager gitManager; private final PermissionBackend permissionBackend; @@ -139,10 +138,11 @@ public class ListDashboards implements RestReadView { project, setDefault)); } catch (ConfigInvalidException e) { - log.warn( - String.format( + logger + .atWarning() + .log( "Cannot parse dashboard %s:%s:%s: %s", - definingProject.getName(), ref.getName(), tw.getPathString(), e.getMessage())); + definingProject.getName(), ref.getName(), tw.getPathString(), e.getMessage()); } } } diff --git a/java/com/google/gerrit/server/restapi/project/ListProjects.java b/java/com/google/gerrit/server/restapi/project/ListProjects.java index 3407d39547..1d63cb44ab 100644 --- a/java/com/google/gerrit/server/restapi/project/ListProjects.java +++ b/java/com/google/gerrit/server/restapi/project/ListProjects.java @@ -22,6 +22,7 @@ import static java.util.stream.Collectors.toList; import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.common.data.GroupReference; import com.google.gerrit.common.errors.NoSuchGroupException; @@ -79,12 +80,10 @@ import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Repository; import org.kohsuke.args4j.Option; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** List projects visible to the calling user. */ public class ListProjects implements RestReadView { - private static final Logger log = LoggerFactory.getLogger(ListProjects.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public enum FilterType { CODE { @@ -453,7 +452,7 @@ public class ListProjects implements RestReadView { // If the Git repository is gone, the project doesn't actually exist anymore. continue; } catch (IOException err) { - log.warn("Unexpected error reading " + projectName, err); + logger.atWarning().withCause(err).log("Unexpected error reading %s", projectName); continue; } @@ -557,9 +556,9 @@ public class ListProjects implements RestReadView { if (projectCache.get(parent) != null) { return parent; } - log.warn( - String.format( - "parent project %s of project %s not found", parent.get(), ps.getName())); + logger + .atWarning() + .log("parent project %s of project %s not found", parent.get(), ps.getName()); } } return null; diff --git a/java/com/google/gerrit/server/restapi/project/PutConfig.java b/java/com/google/gerrit/server/restapi/project/PutConfig.java index 130377ab03..5f14c32edc 100644 --- a/java/com/google/gerrit/server/restapi/project/PutConfig.java +++ b/java/com/google/gerrit/server/restapi/project/PutConfig.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.restapi.project; import com.google.common.base.Joiner; import com.google.common.base.Strings; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.api.projects.ConfigInfo; import com.google.gerrit.extensions.api.projects.ConfigInput; import com.google.gerrit.extensions.api.projects.ConfigValue; @@ -58,12 +59,11 @@ import java.util.Map.Entry; import java.util.regex.Pattern; import org.eclipse.jgit.errors.ConfigInvalidException; import org.eclipse.jgit.errors.RepositoryNotFoundException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class PutConfig implements RestModifyView { - private static final Logger log = LoggerFactory.getLogger(PutConfig.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + private static final Pattern PARAMETER_NAME_PATTERN = Pattern.compile("^[a-zA-Z0-9]+[a-zA-Z0-9-]*$"); @@ -164,7 +164,7 @@ public class PutConfig implements RestModifyView { throw new ResourceConflictException( "Cannot update " + projectName + ": " + e.getCause().getMessage()); } - log.warn("Failed to update config of project {}.", projectName, e); + logger.atWarning().withCause(e).log("Failed to update config of project %s.", projectName); throw new ResourceConflictException("Cannot update " + projectName); } @@ -201,10 +201,11 @@ public class PutConfig implements RestModifyView { if (projectConfigEntry != null) { if (!PARAMETER_NAME_PATTERN.matcher(v.getKey()).matches()) { // TODO check why we have this restriction - log.warn( - "Parameter name '{}' must match '{}'", - v.getKey(), - PARAMETER_NAME_PATTERN.pattern()); + logger + .atWarning() + .log( + "Parameter name '%s' must match '%s'", + v.getKey(), PARAMETER_NAME_PATTERN.pattern()); continue; } String oldValue = cfg.getString(v.getKey()); @@ -252,10 +253,11 @@ public class PutConfig implements RestModifyView { cfg.setStringList(v.getKey(), v.getValue().values); break; default: - log.warn( - "The type '{}' of parameter '{}' is not supported.", - projectConfigEntry.getType().name(), - v.getKey()); + logger + .atWarning() + .log( + "The type '%s' of parameter '%s' is not supported.", + projectConfigEntry.getType().name(), v.getKey()); } } catch (NumberFormatException ex) { throw new BadRequestException( diff --git a/java/com/google/gerrit/server/restapi/project/SetHead.java b/java/com/google/gerrit/server/restapi/project/SetHead.java index aa1bf63a8d..feff98e284 100644 --- a/java/com/google/gerrit/server/restapi/project/SetHead.java +++ b/java/com/google/gerrit/server/restapi/project/SetHead.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.restapi.project; import com.google.common.base.Strings; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.api.projects.HeadInput; import com.google.gerrit.extensions.events.HeadUpdatedListener; import com.google.gerrit.extensions.registration.DynamicSet; @@ -42,12 +43,10 @@ import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.RefUpdate; import org.eclipse.jgit.lib.Repository; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class SetHead implements RestModifyView { - private static final Logger log = LoggerFactory.getLogger(SetHead.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final GitRepositoryManager repoManager; private final Provider identifiedUser; @@ -128,7 +127,7 @@ public class SetHead implements RestModifyView { try { l.onHeadUpdated(event); } catch (RuntimeException e) { - log.warn("Failure in HeadUpdatedListener", e); + logger.atWarning().withCause(e).log("Failure in HeadUpdatedListener"); } } } From 95bd9c2022f7877707fe2873d39405f2eef8bf75 Mon Sep 17 00:00:00 2001 From: Edwin Kempin Date: Mon, 7 May 2018 17:10:12 +0200 Subject: [PATCH 5/9] Migrate sshd classes to Flogger This is the next part of the migration to Flogger. This change migrates all classes of the 'sshd' module to Flogger. Classes of the 'httpd', 'server' and 'restapi' modules have been migrated by predecessor changes. Other modules continue to use slf4j. They should be migrated by follow-up changes. During this migration we try to make the log statements more consistent: - avoid string concatenation - avoid usage of String.format(...) Change-Id: I99d974697df8f7c817b1fcd3df642454a2e874b9 Signed-off-by: Edwin Kempin --- java/com/google/gerrit/sshd/BUILD | 2 +- java/com/google/gerrit/sshd/BaseCommand.java | 12 ++--- .../gerrit/sshd/CommandFactoryProvider.java | 17 +++--- .../gerrit/sshd/DatabasePubKeyAuth.java | 9 ++-- java/com/google/gerrit/sshd/SshDaemon.java | 53 ++++++++++--------- .../google/gerrit/sshd/SshKeyCacheImpl.java | 16 +++--- .../google/gerrit/sshd/SshKeyCreatorImpl.java | 7 ++- .../gerrit/sshd/SshPluginStarterCallback.java | 14 ++--- .../gerrit/sshd/commands/AdminSetParent.java | 9 ++-- .../gerrit/sshd/commands/CloseConnection.java | 10 ++-- .../google/gerrit/sshd/commands/Receive.java | 7 ++- .../gerrit/sshd/commands/ReviewCommand.java | 7 ++- .../gerrit/sshd/commands/ScpCommand.java | 10 ++-- .../sshd/commands/SetReviewersCommand.java | 7 ++- .../gerrit/sshd/commands/StreamEvents.java | 7 ++- .../sshd/plugin/LfsPluginAuthCommand.java | 8 +-- 16 files changed, 95 insertions(+), 100 deletions(-) diff --git a/java/com/google/gerrit/sshd/BUILD b/java/com/google/gerrit/sshd/BUILD index c36d68b766..6c810a369d 100644 --- a/java/com/google/gerrit/sshd/BUILD +++ b/java/com/google/gerrit/sshd/BUILD @@ -29,12 +29,12 @@ java_library( "//lib/bouncycastle:bcprov-neverlink", "//lib/commons:codec", "//lib/dropwizard:dropwizard-core", + "//lib/flogger:api", "//lib/guice", "//lib/guice:guice-assistedinject", "//lib/guice:guice-servlet", # SSH should not depend on servlet "//lib/jgit/org.eclipse.jgit.archive:jgit-archive", "//lib/jgit/org.eclipse.jgit:jgit", - "//lib/log:api", "//lib/log:log4j", "//lib/mina:core", "//lib/mina:sshd", diff --git a/java/com/google/gerrit/sshd/BaseCommand.java b/java/com/google/gerrit/sshd/BaseCommand.java index 3da8b5cc39..dae9016d9b 100644 --- a/java/com/google/gerrit/sshd/BaseCommand.java +++ b/java/com/google/gerrit/sshd/BaseCommand.java @@ -17,6 +17,7 @@ package com.google.gerrit.sshd; import static java.nio.charset.StandardCharsets.UTF_8; import com.google.common.base.Joiner; +import com.google.common.flogger.FluentLogger; import com.google.common.util.concurrent.Atomics; import com.google.gerrit.common.Nullable; import com.google.gerrit.common.TimeUtil; @@ -59,11 +60,10 @@ import org.apache.sshd.server.ExitCallback; import org.kohsuke.args4j.Argument; import org.kohsuke.args4j.CmdLineException; import org.kohsuke.args4j.Option; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public abstract class BaseCommand implements Command { - private static final Logger log = LoggerFactory.getLogger(BaseCommand.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + public static final Charset ENC = UTF_8; private static final int PRIVATE_STATUS = 1 << 30; @@ -351,7 +351,7 @@ public abstract class BaseCommand implements Command { } m.append(" during "); m.append(context.getCommandLine()); - log.error(m.toString(), e); + logger.atSevere().withCause(e).log(m.toString()); } if (e instanceof Failure) { @@ -362,7 +362,7 @@ public abstract class BaseCommand implements Command { } catch (IOException e2) { // Ignored } catch (Throwable e2) { - log.warn("Cannot send failure message to client", e2); + logger.atWarning().withCause(e2).log("Cannot send failure message to client"); } return f.exitCode; } @@ -373,7 +373,7 @@ public abstract class BaseCommand implements Command { } catch (IOException e2) { // Ignored } catch (Throwable e2) { - log.warn("Cannot send internal server error message to client", e2); + logger.atWarning().withCause(e2).log("Cannot send internal server error message to client"); } return 128; } diff --git a/java/com/google/gerrit/sshd/CommandFactoryProvider.java b/java/com/google/gerrit/sshd/CommandFactoryProvider.java index 4cd748733c..6263192daa 100644 --- a/java/com/google/gerrit/sshd/CommandFactoryProvider.java +++ b/java/com/google/gerrit/sshd/CommandFactoryProvider.java @@ -14,6 +14,7 @@ package com.google.gerrit.sshd; +import com.google.common.flogger.FluentLogger; import com.google.common.util.concurrent.Atomics; import com.google.common.util.concurrent.ThreadFactoryBuilder; import com.google.gerrit.extensions.events.LifecycleListener; @@ -44,13 +45,11 @@ import org.apache.sshd.server.ExitCallback; import org.apache.sshd.server.SessionAware; import org.apache.sshd.server.session.ServerSession; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Creates a CommandFactory using commands registered by {@link CommandModule}. */ @Singleton class CommandFactoryProvider implements Provider, LifecycleListener { - private static final Logger logger = LoggerFactory.getLogger(CommandFactoryProvider.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final DispatchCommandProvider dispatcher; private final SshLog log; @@ -166,12 +165,12 @@ class CommandFactoryProvider implements Provider, LifecycleListe try { onStart(); } catch (Exception e) { - logger.warn( - "Cannot start command \"" - + ctx.getCommandLine() - + "\" for user " - + ctx.getSession().getUsername(), - e); + logger + .atWarning() + .withCause(e) + .log( + "Cannot start command \"%s\" for user %s", + ctx.getCommandLine(), ctx.getSession().getUsername()); } } diff --git a/java/com/google/gerrit/sshd/DatabasePubKeyAuth.java b/java/com/google/gerrit/sshd/DatabasePubKeyAuth.java index 74cdd99aff..be17219e1a 100644 --- a/java/com/google/gerrit/sshd/DatabasePubKeyAuth.java +++ b/java/com/google/gerrit/sshd/DatabasePubKeyAuth.java @@ -18,6 +18,7 @@ import static java.nio.charset.StandardCharsets.ISO_8859_1; import static java.nio.charset.StandardCharsets.UTF_8; import com.google.common.base.Preconditions; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.FileUtil; import com.google.gerrit.server.IdentifiedUser; import com.google.gerrit.server.PeerDaemonUser; @@ -44,12 +45,10 @@ import org.apache.sshd.common.util.buffer.ByteArrayBuffer; import org.apache.sshd.server.auth.pubkey.PublickeyAuthenticator; import org.apache.sshd.server.session.ServerSession; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Authenticates by public key through {@link AccountSshKey} entities. */ class DatabasePubKeyAuth implements PublickeyAuthenticator { - private static final Logger log = LoggerFactory.getLogger(DatabasePubKeyAuth.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final SshKeyCacheImpl sshKeyCache; private final SshLog sshLog; @@ -203,13 +202,13 @@ class DatabasePubKeyAuth implements PublickeyAuthenticator { } catch (NoSuchFileException noFile) { return Collections.emptySet(); } catch (IOException err) { - log.error("Cannot read " + path, err); + logger.atSevere().withCause(err).log("Cannot read %s", path); return Collections.emptySet(); } } private static void logBadKey(Path path, String line, Exception e) { - log.warn("Invalid key in " + path + ":\n " + line, e); + logger.atWarning().withCause(e).log("Invalid key in %s:\n %s", path, line); } boolean isCurrent() { diff --git a/java/com/google/gerrit/sshd/SshDaemon.java b/java/com/google/gerrit/sshd/SshDaemon.java index ecd94768aa..bece504cc1 100644 --- a/java/com/google/gerrit/sshd/SshDaemon.java +++ b/java/com/google/gerrit/sshd/SshDaemon.java @@ -21,6 +21,7 @@ import static org.apache.sshd.common.channel.ChannelOutputStream.WAIT_FOR_SPACE_ import com.google.common.base.Strings; import com.google.common.collect.Iterables; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Version; import com.google.gerrit.extensions.events.LifecycleListener; import com.google.gerrit.metrics.Counter0; @@ -111,8 +112,6 @@ import org.apache.sshd.server.session.SessionFactory; import org.bouncycastle.crypto.prng.RandomGenerator; import org.bouncycastle.crypto.prng.VMPCRandomGenerator; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * SSH daemon to communicate with Gerrit. @@ -133,7 +132,7 @@ import org.slf4j.LoggerFactory; */ @Singleton public class SshDaemon extends SshServer implements SshInfo, LifecycleListener { - private static final Logger sshDaemonLog = LoggerFactory.getLogger(SshDaemon.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public enum SshSessionBackend { MINA, @@ -334,7 +333,7 @@ public class SshDaemon extends SshServer implements SshInfo, LifecycleListener { throw new IllegalStateException("Cannot bind to " + addressList(), e); } - sshDaemonLog.info(String.format("Started Gerrit %s on %s", getVersion(), addressList())); + logger.atInfo().log("Started Gerrit %s on %s", getVersion(), addressList()); } } @@ -348,9 +347,9 @@ public class SshDaemon extends SshServer implements SshInfo, LifecycleListener { try { daemonAcceptor.close(true).await(); shutdownExecutors(); - sshDaemonLog.info("Stopped Gerrit SSHD"); + logger.atInfo().log("Stopped Gerrit SSHD"); } catch (IOException e) { - sshDaemonLog.warn("Exception caught while closing", e); + logger.atWarning().withCause(e).log("Exception caught while closing"); } finally { daemonAcceptor = null; } @@ -400,9 +399,9 @@ public class SshDaemon extends SshServer implements SshInfo, LifecycleListener { try { r.add(new HostKey(addr, keyBin)); } catch (JSchException e) { - sshDaemonLog.warn( - String.format( - "Cannot format SSHD host key [%s]: %s", pub.getAlgorithm(), e.getMessage())); + logger + .atWarning() + .log("Cannot format SSHD host key [%s]: %s", pub.getAlgorithm(), e.getMessage()); } } } @@ -533,15 +532,14 @@ public class SshDaemon extends SshServer implements SshInfo, LifecycleListener { final byte[] iv = new byte[c.getIVSize()]; c.init(Cipher.Mode.Encrypt, key, iv); } catch (InvalidKeyException e) { - sshDaemonLog.warn( - "Disabling cipher " - + f.getName() - + ": " - + e.getMessage() - + "; try installing unlimited cryptography extension"); + logger + .atWarning() + .log( + "Disabling cipher %s: %s; try installing unlimited cryptography extension", + f.getName(), e.getMessage()); i.remove(); } catch (Exception e) { - sshDaemonLog.warn("Disabling cipher " + f.getName() + ": " + e.getMessage()); + logger.atWarning().log("Disabling cipher %s: %s", f.getName(), e.getMessage()); i.remove(); } } @@ -602,7 +600,7 @@ public class SshDaemon extends SshServer implements SshInfo, LifecycleListener { msg.append(avail[i].getName()); } msg.append(" is supported"); - sshDaemonLog.error(msg.toString()); + logger.atSevere().log(msg.toString()); } else if (add) { if (!def.contains(n)) { def.add(n); @@ -670,12 +668,13 @@ public class SshDaemon extends SshServer implements SshInfo, LifecycleListener { List> authFactories = new ArrayList<>(); if (kerberosKeytab != null) { authFactories.add(UserAuthGSSFactory.INSTANCE); - sshDaemonLog.info("Enabling kerberos with keytab " + kerberosKeytab); + logger.atInfo().log("Enabling kerberos with keytab %s", kerberosKeytab); if (!new File(kerberosKeytab).canRead()) { - sshDaemonLog.error( - "Keytab " - + kerberosKeytab - + " does not exist or is not readable; further errors are possible"); + logger + .atSevere() + .log( + "Keytab %s does not exist or is not readable; further errors are possible", + kerberosKeytab); } kerberosAuthenticator.setKeytabFile(kerberosKeytab); if (kerberosPrincipal == null) { @@ -685,11 +684,13 @@ public class SshDaemon extends SshServer implements SshInfo, LifecycleListener { kerberosPrincipal = "host/localhost"; } } - sshDaemonLog.info("Using kerberos principal " + kerberosPrincipal); + logger.atInfo().log("Using kerberos principal %s", kerberosPrincipal); if (!kerberosPrincipal.startsWith("host/")) { - sshDaemonLog.warn( - "Host principal does not start with host/ " - + "which most SSH clients will supply automatically"); + logger + .atWarning() + .log( + "Host principal does not start with host/ " + + "which most SSH clients will supply automatically"); } kerberosAuthenticator.setServicePrincipalName(kerberosPrincipal); setGSSAuthenticator(kerberosAuthenticator); diff --git a/java/com/google/gerrit/sshd/SshKeyCacheImpl.java b/java/com/google/gerrit/sshd/SshKeyCacheImpl.java index 3ab7a5861b..e67ee97038 100644 --- a/java/com/google/gerrit/sshd/SshKeyCacheImpl.java +++ b/java/com/google/gerrit/sshd/SshKeyCacheImpl.java @@ -18,6 +18,7 @@ import static com.google.gerrit.server.account.externalids.ExternalId.SCHEME_USE import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.server.account.AccountSshKey; import com.google.gerrit.server.account.VersionedAuthorizedKeys; import com.google.gerrit.server.account.externalids.ExternalId; @@ -38,13 +39,12 @@ import java.util.List; import java.util.Optional; import java.util.concurrent.ExecutionException; import org.eclipse.jgit.errors.ConfigInvalidException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Provides the {@link SshKeyCacheEntry}. */ @Singleton public class SshKeyCacheImpl implements SshKeyCache { - private static final Logger log = LoggerFactory.getLogger(SshKeyCacheImpl.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + private static final String CACHE_NAME = "sshkeys"; static final Iterable NO_SUCH_USER = none(); @@ -78,7 +78,7 @@ public class SshKeyCacheImpl implements SshKeyCache { try { return cache.get(username); } catch (ExecutionException e) { - log.warn("Cannot load SSH keys for " + username, e); + logger.atWarning().withCause(e).log("Cannot load SSH keys for %s", username); return Collections.emptyList(); } } @@ -135,11 +135,13 @@ public class SshKeyCacheImpl implements SshKeyCache { private void markInvalid(AccountSshKey k) { try { - log.info("Flagging SSH key " + k.seq() + " of account " + k.accountId() + " invalid"); + logger.atInfo().log("Flagging SSH key %d of account %s invalid", k.seq(), k.accountId()); authorizedKeys.markKeyInvalid(k.accountId(), k.seq()); } catch (IOException | ConfigInvalidException e) { - log.error( - "Failed to mark SSH key " + k.seq() + " of account " + k.accountId() + " invalid", e); + logger + .atSevere() + .withCause(e) + .log("Failed to mark SSH key %d of account %s invalid", k.seq(), k.accountId()); } } } diff --git a/java/com/google/gerrit/sshd/SshKeyCreatorImpl.java b/java/com/google/gerrit/sshd/SshKeyCreatorImpl.java index bb47e3f492..d89f9e0c2e 100644 --- a/java/com/google/gerrit/sshd/SshKeyCreatorImpl.java +++ b/java/com/google/gerrit/sshd/SshKeyCreatorImpl.java @@ -14,6 +14,7 @@ package com.google.gerrit.sshd; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.errors.InvalidSshKeyException; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.server.account.AccountSshKey; @@ -21,11 +22,9 @@ import com.google.gerrit.server.ssh.SshKeyCreator; import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; import java.security.spec.InvalidKeySpecException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class SshKeyCreatorImpl implements SshKeyCreator { - private static final Logger log = LoggerFactory.getLogger(SshKeyCreatorImpl.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); @Override public AccountSshKey create(Account.Id accountId, int seq, String encoded) @@ -38,7 +37,7 @@ public class SshKeyCreatorImpl implements SshKeyCreator { throw new InvalidSshKeyException(); } catch (NoSuchProviderException e) { - log.error("Cannot parse SSH key", e); + logger.atSevere().withCause(e).log("Cannot parse SSH key"); throw new InvalidSshKeyException(); } } diff --git a/java/com/google/gerrit/sshd/SshPluginStarterCallback.java b/java/com/google/gerrit/sshd/SshPluginStarterCallback.java index 9ae1814f56..57d8bc768e 100644 --- a/java/com/google/gerrit/sshd/SshPluginStarterCallback.java +++ b/java/com/google/gerrit/sshd/SshPluginStarterCallback.java @@ -14,6 +14,7 @@ package com.google.gerrit.sshd; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.registration.DynamicMap; import com.google.gerrit.server.DynamicOptions; import com.google.gerrit.server.plugins.Plugin; @@ -24,12 +25,10 @@ import com.google.inject.Key; import com.google.inject.Provider; import com.google.inject.Singleton; import org.apache.sshd.server.Command; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton class SshPluginStarterCallback implements StartPluginListener, ReloadPluginListener { - private static final Logger log = LoggerFactory.getLogger(SshPluginStarterCallback.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final DispatchCommandProvider root; private final DynamicMap dynamicBeans; @@ -65,11 +64,12 @@ class SshPluginStarterCallback implements StartPluginListener, ReloadPluginListe return plugin.getSshInjector().getProvider(key); } catch (RuntimeException err) { if (!providesDynamicOptions(plugin)) { - log.warn( - String.format( + logger + .atWarning() + .withCause(err) + .log( "Plugin %s did not define its top-level command nor any DynamicOptions", - plugin.getName()), - err); + plugin.getName()); } } } diff --git a/java/com/google/gerrit/sshd/commands/AdminSetParent.java b/java/com/google/gerrit/sshd/commands/AdminSetParent.java index ef669908eb..6bc7ce2c15 100644 --- a/java/com/google/gerrit/sshd/commands/AdminSetParent.java +++ b/java/com/google/gerrit/sshd/commands/AdminSetParent.java @@ -16,6 +16,7 @@ package com.google.gerrit.sshd.commands; import static java.util.stream.Collectors.toList; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.GlobalCapability; import com.google.gerrit.extensions.annotations.RequiresCapability; import com.google.gerrit.extensions.common.ProjectInfo; @@ -42,8 +43,6 @@ import org.eclipse.jgit.errors.ConfigInvalidException; import org.eclipse.jgit.errors.RepositoryNotFoundException; import org.kohsuke.args4j.Argument; import org.kohsuke.args4j.Option; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @RequiresCapability(GlobalCapability.ADMINISTRATE_SERVER) @CommandMetaData( @@ -51,7 +50,7 @@ import org.slf4j.LoggerFactory; description = "Change the project permissions are inherited from" ) final class AdminSetParent extends SshCommand { - private static final Logger log = LoggerFactory.getLogger(AdminSetParent.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); @Option( name = "--parent", @@ -172,7 +171,7 @@ final class AdminSetParent extends SshCommand { err.append("error: Project ").append(name).append(" not found\n"); } catch (IOException | ConfigInvalidException e) { final String msg = "Cannot update project " + name; - log.error(msg, e); + logger.atSevere().withCause(e).log(msg); err.append("error: ").append(msg).append("\n"); } @@ -180,7 +179,7 @@ final class AdminSetParent extends SshCommand { projectCache.evict(nameKey); } catch (IOException e) { final String msg = "Cannot reindex project: " + name; - log.error(msg, e); + logger.atSevere().withCause(e).log(msg); err.append("error: ").append(msg).append("\n"); } } diff --git a/java/com/google/gerrit/sshd/commands/CloseConnection.java b/java/com/google/gerrit/sshd/commands/CloseConnection.java index 0e101a900a..1f945dc779 100644 --- a/java/com/google/gerrit/sshd/commands/CloseConnection.java +++ b/java/com/google/gerrit/sshd/commands/CloseConnection.java @@ -16,6 +16,7 @@ package com.google.gerrit.sshd.commands; import static com.google.gerrit.sshd.CommandMetaData.Mode.MASTER_OR_SLAVE; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.GlobalCapability; import com.google.gerrit.extensions.annotations.RequiresCapability; import com.google.gerrit.sshd.AdminHighPriorityCommand; @@ -33,8 +34,6 @@ import org.apache.sshd.common.io.IoSession; import org.apache.sshd.common.session.helpers.AbstractSession; import org.kohsuke.args4j.Argument; import org.kohsuke.args4j.Option; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Close specified SSH connections */ @AdminHighPriorityCommand @@ -45,8 +44,7 @@ import org.slf4j.LoggerFactory; runsAt = MASTER_OR_SLAVE ) final class CloseConnection extends SshCommand { - - private static final Logger log = LoggerFactory.getLogger(CloseConnection.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); @Inject private SshDaemon sshDaemon; @@ -84,7 +82,9 @@ final class CloseConnection extends SshCommand { future.await(); stdout.println("closed connection " + sessionId); } catch (IOException e) { - log.warn("Wait for connection to close interrupted: " + e.getMessage()); + logger + .atWarning() + .log("Wait for connection to close interrupted: %s", e.getMessage()); } } break; diff --git a/java/com/google/gerrit/sshd/commands/Receive.java b/java/com/google/gerrit/sshd/commands/Receive.java index a455c9082c..1f6ff3670f 100644 --- a/java/com/google/gerrit/sshd/commands/Receive.java +++ b/java/com/google/gerrit/sshd/commands/Receive.java @@ -16,6 +16,7 @@ package com.google.gerrit.sshd.commands; import com.google.common.collect.MultimapBuilder; import com.google.common.collect.SetMultimap; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.Capable; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.reviewdb.client.Account; @@ -41,8 +42,6 @@ import org.eclipse.jgit.lib.RefDatabase; import org.eclipse.jgit.transport.AdvertiseRefsHook; import org.eclipse.jgit.transport.ReceivePack; import org.kohsuke.args4j.Option; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Receives change upload over SSH using the Git receive-pack protocol. */ @CommandMetaData( @@ -50,7 +49,7 @@ import org.slf4j.LoggerFactory; description = "Standard Git server side command for client side git push" ) final class Receive extends AbstractGitCommand { - private static final Logger log = LoggerFactory.getLogger(Receive.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); @Inject private AsyncReceiveCommits.Factory factory; @Inject private IdentifiedUser currentUser; @@ -121,7 +120,7 @@ final class Receive extends AbstractGitCommand { msg.append(currentUser.getAccountId()); msg.append("): "); msg.append(badStream.getCause().getMessage()); - log.info(msg.toString()); + logger.atInfo().log(msg.toString()); throw new UnloggedFailure(128, "error: " + badStream.getCause().getMessage()); } diff --git a/java/com/google/gerrit/sshd/commands/ReviewCommand.java b/java/com/google/gerrit/sshd/commands/ReviewCommand.java index 1d764b9b90..7566751454 100644 --- a/java/com/google/gerrit/sshd/commands/ReviewCommand.java +++ b/java/com/google/gerrit/sshd/commands/ReviewCommand.java @@ -17,6 +17,7 @@ package com.google.gerrit.sshd.commands; import static java.nio.charset.StandardCharsets.UTF_8; import com.google.common.base.Strings; +import com.google.common.flogger.FluentLogger; import com.google.common.io.CharStreams; import com.google.gerrit.common.data.LabelType; import com.google.gerrit.common.data.LabelValue; @@ -53,12 +54,10 @@ import java.util.Set; import java.util.TreeMap; import org.kohsuke.args4j.Argument; import org.kohsuke.args4j.Option; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @CommandMetaData(name = "review", description = "Apply reviews to one or more patch sets") public class ReviewCommand extends SshCommand { - private static final Logger log = LoggerFactory.getLogger(ReviewCommand.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); @Override protected final CmdLineParser newCmdLineParser(Object options) { @@ -231,7 +230,7 @@ public class ReviewCommand extends SshCommand { } catch (Exception e) { ok = false; writeError("fatal", "internal server error while reviewing " + patchSet.getId() + "\n"); - log.error("internal error while reviewing " + patchSet.getId(), e); + logger.atSevere().withCause(e).log("internal error while reviewing %s", patchSet.getId()); } } diff --git a/java/com/google/gerrit/sshd/commands/ScpCommand.java b/java/com/google/gerrit/sshd/commands/ScpCommand.java index 1306c52eab..89a09efef9 100644 --- a/java/com/google/gerrit/sshd/commands/ScpCommand.java +++ b/java/com/google/gerrit/sshd/commands/ScpCommand.java @@ -24,6 +24,7 @@ package com.google.gerrit.sshd.commands; import static java.nio.charset.StandardCharsets.UTF_8; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.server.tools.ToolsCatalog; import com.google.gerrit.server.tools.ToolsCatalog.Entry; import com.google.gerrit.sshd.BaseCommand; @@ -33,13 +34,12 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.UnsupportedEncodingException; import org.apache.sshd.server.Environment; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; final class ScpCommand extends BaseCommand { + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + private static final String TYPE_DIR = "D"; private static final String TYPE_FILE = "C"; - private static final Logger log = LoggerFactory.getLogger(ScpCommand.class); private boolean opt_r; private boolean opt_t; @@ -137,7 +137,7 @@ final class ScpCommand extends BaseCommand { } catch (IOException e2) { // Ignore } - log.debug("Error in scp command", e); + logger.atFine().withCause(e).log("Error in scp command"); } } @@ -216,7 +216,7 @@ final class ScpCommand extends BaseCommand { case 0: break; case 1: - log.debug("Received warning: " + readLine()); + logger.atFine().log("Received warning: %s", readLine()); break; case 2: throw new IOException("Received nack: " + readLine()); diff --git a/java/com/google/gerrit/sshd/commands/SetReviewersCommand.java b/java/com/google/gerrit/sshd/commands/SetReviewersCommand.java index c777afac5d..2a1e3c28cc 100644 --- a/java/com/google/gerrit/sshd/commands/SetReviewersCommand.java +++ b/java/com/google/gerrit/sshd/commands/SetReviewersCommand.java @@ -14,6 +14,7 @@ package com.google.gerrit.sshd.commands; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.api.changes.AddReviewerInput; import com.google.gerrit.extensions.api.changes.DeleteReviewerInput; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; @@ -39,12 +40,10 @@ import java.util.Map; import java.util.Set; import org.kohsuke.args4j.Argument; import org.kohsuke.args4j.Option; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @CommandMetaData(name = "set-reviewers", description = "Add or remove reviewers on a change") public class SetReviewersCommand extends SshCommand { - private static final Logger log = LoggerFactory.getLogger(SetReviewersCommand.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); @Option(name = "--project", aliases = "-p", usage = "project containing the change") private ProjectState projectState; @@ -106,7 +105,7 @@ public class SetReviewersCommand extends SshCommand { ok &= modifyOne(rsrc); } catch (Exception err) { ok = false; - log.error("Error updating reviewers on change " + rsrc.getId(), err); + logger.atSevere().withCause(err).log("Error updating reviewers on change %s", rsrc.getId()); writeError("fatal", "internal error while updating " + rsrc.getId()); } } diff --git a/java/com/google/gerrit/sshd/commands/StreamEvents.java b/java/com/google/gerrit/sshd/commands/StreamEvents.java index 9e8e85e421..ec5e6bd8a8 100644 --- a/java/com/google/gerrit/sshd/commands/StreamEvents.java +++ b/java/com/google/gerrit/sshd/commands/StreamEvents.java @@ -17,6 +17,7 @@ package com.google.gerrit.sshd.commands; import static java.nio.charset.StandardCharsets.UTF_8; import com.google.common.base.Supplier; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.GlobalCapability; import com.google.gerrit.extensions.annotations.RequiresCapability; import com.google.gerrit.extensions.registration.DynamicSet; @@ -45,13 +46,11 @@ import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ScheduledThreadPoolExecutor; import org.apache.sshd.server.Environment; import org.kohsuke.args4j.Option; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @RequiresCapability(GlobalCapability.STREAM_EVENTS) @CommandMetaData(name = "stream-events", description = "Monitor events occurring in real time") final class StreamEvents extends BaseCommand { - private static final Logger log = LoggerFactory.getLogger(StreamEvents.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); /** Maximum number of events that may be queued up for each connection. */ private static final int MAX_EVENTS = 128; @@ -279,7 +278,7 @@ final class StreamEvents extends BaseCommand { try { msg = gson.toJson(message) + "\n"; } catch (Exception e) { - log.warn("Could not deserialize the msg: ", e); + logger.atWarning().withCause(e).log("Could not deserialize the msg"); } if (msg != null) { synchronized (stdout) { diff --git a/java/com/google/gerrit/sshd/plugin/LfsPluginAuthCommand.java b/java/com/google/gerrit/sshd/plugin/LfsPluginAuthCommand.java index 1858f40732..8fb2461af7 100644 --- a/java/com/google/gerrit/sshd/plugin/LfsPluginAuthCommand.java +++ b/java/com/google/gerrit/sshd/plugin/LfsPluginAuthCommand.java @@ -14,6 +14,7 @@ package com.google.gerrit.sshd.plugin; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.registration.DynamicItem; import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.config.GerritServerConfig; @@ -24,11 +25,10 @@ import java.util.ArrayList; import java.util.List; import org.eclipse.jgit.lib.Config; import org.kohsuke.args4j.Argument; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class LfsPluginAuthCommand extends SshCommand { - private static final Logger log = LoggerFactory.getLogger(LfsPluginAuthCommand.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + private static final String CONFIGURATION_ERROR = "Server configuration error: LFS auth over SSH is not properly configured."; @@ -67,7 +67,7 @@ public class LfsPluginAuthCommand extends SshCommand { protected void run() throws UnloggedFailure, Exception { LfsSshPluginAuth pluginAuth = auth.get(); if (pluginAuth == null) { - log.warn(CONFIGURATION_ERROR); + logger.atWarning().log(CONFIGURATION_ERROR); throw new UnloggedFailure(1, CONFIGURATION_ERROR); } From a8fec0e2276b0baf7d0460bd957aed74a6868b7b Mon Sep 17 00:00:00 2001 From: Edwin Kempin Date: Tue, 8 May 2018 09:09:58 +0200 Subject: [PATCH 6/9] Migrate pgm classes to Flogger This is the next part of the migration to Flogger. This change migrates all classes of the 'pgm' module to Flogger. Classes of most other modules have blready een migrated by predecessor changes. Some remaining modules continue to use slf4j. They should be migrated by follow-up changes. During this migration we try to make the log statements more consistent: - avoid string concatenation - avoid usage of String.format(...) Change-Id: I51374131bbd97359ac4552df9878ff7f74c64e21 Signed-off-by: Edwin Kempin --- java/com/google/gerrit/pgm/BUILD | 2 +- java/com/google/gerrit/pgm/Daemon.java | 17 +++---- java/com/google/gerrit/pgm/JythonShell.java | 27 +++++----- .../google/gerrit/pgm/SwitchSecureStore.java | 50 ++++++++++++------- .../google/gerrit/pgm/WarDistribution.java | 8 ++- java/com/google/gerrit/pgm/http/jetty/BUILD | 2 +- .../pgm/http/jetty/HiddenErrorHandler.java | 7 ++- java/com/google/gerrit/pgm/init/BUILD | 2 +- java/com/google/gerrit/pgm/init/BaseInit.java | 9 ++-- .../pgm/init/api/AllProjectsConfig.java | 10 ++-- java/com/google/gerrit/pgm/init/api/BUILD | 2 +- java/com/google/gerrit/pgm/util/BUILD | 1 - .../gerrit/pgm/util/LogFileCompressor.java | 13 +++-- .../gerrit/pgm/util/RuntimeShutdown.java | 11 ++-- .../google/gerrit/pgm/util/ThreadLimiter.java | 7 ++- 15 files changed, 88 insertions(+), 80 deletions(-) diff --git a/java/com/google/gerrit/pgm/BUILD b/java/com/google/gerrit/pgm/BUILD index 76421fcd1f..c83f8af547 100644 --- a/java/com/google/gerrit/pgm/BUILD +++ b/java/com/google/gerrit/pgm/BUILD @@ -51,11 +51,11 @@ java_library( "//lib:servlet-api-3_1-without-neverlink", "//lib/auto:auto-value", "//lib/auto:auto-value-annotations", + "//lib/flogger:api", "//lib/guice", "//lib/guice:guice-assistedinject", "//lib/guice:guice-servlet", "//lib/jgit/org.eclipse.jgit:jgit", - "//lib/log:api", "//lib/log:jsonevent-layout", "//lib/log:log4j", "//lib/prolog:cafeteria", diff --git a/java/com/google/gerrit/pgm/Daemon.java b/java/com/google/gerrit/pgm/Daemon.java index 53e43a234d..d2e518cdbe 100644 --- a/java/com/google/gerrit/pgm/Daemon.java +++ b/java/com/google/gerrit/pgm/Daemon.java @@ -20,6 +20,7 @@ import static java.nio.charset.StandardCharsets.UTF_8; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.MoreObjects; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.elasticsearch.ElasticIndexModule; import com.google.gerrit.extensions.client.AuthType; @@ -127,12 +128,10 @@ import javax.servlet.http.HttpServletRequest; import org.eclipse.jgit.lib.Config; import org.kohsuke.args4j.Option; import org.kohsuke.args4j.spi.ExplicitBooleanOptionHandler; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Run SSH daemon portions of Gerrit. */ public class Daemon extends SiteProgram { - private static final Logger log = LoggerFactory.getLogger(Daemon.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); @Option(name = "--enable-httpd", usage = "Enable the internal HTTP daemon") private Boolean httpd; @@ -249,7 +248,7 @@ public class Daemon extends SiteProgram { new UncaughtExceptionHandler() { @Override public void uncaughtException(Thread t, Throwable e) { - log.error("Thread " + t.getName() + " threw exception", e); + logger.atSevere().withCause(e).log("Thread %s threw exception", t.getName()); } }); @@ -269,17 +268,17 @@ public class Daemon extends SiteProgram { start(); RuntimeShutdown.add( () -> { - log.info("caught shutdown, cleaning up"); + logger.atInfo().log("caught shutdown, cleaning up"); stop(); }); - log.info("Gerrit Code Review " + myVersion() + " ready"); + logger.atInfo().log("Gerrit Code Review %s ready", myVersion()); if (runId != null) { try { Files.write(runFile, (runId + "\n").getBytes(UTF_8)); runFile.toFile().setReadable(true, false); } catch (IOException err) { - log.warn("Cannot write --run-id to " + runFile, err); + logger.atWarning().withCause(err).log("Cannot write --run-id to %s", runFile); } } @@ -299,7 +298,7 @@ public class Daemon extends SiteProgram { } return 0; } catch (Throwable err) { - log.error("Unable to start daemon", err); + logger.atSevere().withCause(err).log("Unable to start daemon"); return 1; } } @@ -366,7 +365,7 @@ public class Daemon extends SiteProgram { try { Files.delete(runFile); } catch (IOException err) { - log.warn("failed to delete " + runFile, err); + logger.atWarning().withCause(err).log("failed to delete %s", runFile); } } manager.stop(); diff --git a/java/com/google/gerrit/pgm/JythonShell.java b/java/com/google/gerrit/pgm/JythonShell.java index e1a7bd4f85..35156e18fa 100644 --- a/java/com/google/gerrit/pgm/JythonShell.java +++ b/java/com/google/gerrit/pgm/JythonShell.java @@ -14,6 +14,7 @@ package com.google.gerrit.pgm; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.launcher.GerritLauncher; import java.io.File; import java.io.IOException; @@ -24,11 +25,10 @@ import java.net.URL; import java.net.URLClassLoader; import java.util.ArrayList; import java.util.Properties; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class JythonShell { - private static final Logger log = LoggerFactory.getLogger(JythonShell.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + private static final String STARTUP_RESOURCE = "com/google/gerrit/pgm/Startup.py"; private static final String STARTUP_FILE = "Startup.py"; @@ -79,7 +79,7 @@ public class JythonShell { try { shell = console.getConstructor(new Class[] {}).newInstance(); - log.info("Jython shell instance created."); + logger.atInfo().log("Jython shell instance created."); } catch (InstantiationException | IllegalAccessException | IllegalArgumentException @@ -170,10 +170,10 @@ public class JythonShell { if (in != null) { execStream(in, "resource " + p); } else { - log.error("Cannot load resource " + p); + logger.atSevere().log("Cannot load resource %s", p); } } catch (IOException e) { - log.error(e.getMessage(), e); + logger.atSevere().withCause(e).log(e.getMessage()); } } @@ -188,15 +188,16 @@ public class JythonShell { new Class[] {String.class}, new Object[] {script.getAbsolutePath()}); } else { - log.info( - "User initialization file " - + script.getAbsolutePath() - + " is not found or not executable"); + logger + .atInfo() + .log( + "User initialization file %s is not found or not executable", + script.getAbsolutePath()); } } catch (InvocationTargetException e) { - log.error("Exception occurred while loading file " + p + " : ", e); + logger.atSevere().withCause(e).log("Exception occurred while loading file %s", p); } catch (SecurityException e) { - log.error("SecurityException occurred while loading file " + p + " : ", e); + logger.atSevere().withCause(e).log("SecurityException occurred while loading file %s", p); } } @@ -209,7 +210,7 @@ public class JythonShell { new Class[] {InputStream.class, String.class}, new Object[] {in, p}); } catch (InvocationTargetException e) { - log.error("Exception occurred while loading " + p + " : ", e); + logger.atSevere().withCause(e).log("Exception occurred while loading %s", p); } } diff --git a/java/com/google/gerrit/pgm/SwitchSecureStore.java b/java/com/google/gerrit/pgm/SwitchSecureStore.java index 1a2216224c..d8f3ffa4bf 100644 --- a/java/com/google/gerrit/pgm/SwitchSecureStore.java +++ b/java/com/google/gerrit/pgm/SwitchSecureStore.java @@ -19,6 +19,7 @@ import static com.google.gerrit.server.schema.DataSourceProvider.Context.SINGLE_ import com.google.common.base.Joiner; import com.google.common.base.Strings; import com.google.common.collect.Iterables; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.IoUtil; import com.google.gerrit.common.SiteLibraryLoaderUtil; import com.google.gerrit.pgm.util.SiteProgram; @@ -40,10 +41,10 @@ import org.eclipse.jgit.errors.ConfigInvalidException; import org.eclipse.jgit.storage.file.FileBasedConfig; import org.eclipse.jgit.util.FS; import org.kohsuke.args4j.Option; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class SwitchSecureStore extends SiteProgram { + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + private static String getSecureStoreClassFromGerritConfig(SitePaths sitePaths) { FileBasedConfig cfg = new FileBasedConfig(sitePaths.gerrit_config.toFile(), FS.DETECTED); try { @@ -54,8 +55,6 @@ public class SwitchSecureStore extends SiteProgram { return cfg.getString("gerrit", null, "secureStoreClass"); } - private static final Logger log = LoggerFactory.getLogger(SwitchSecureStore.class); - @Option( name = "--new-secure-store-lib", usage = "Path to new SecureStore implementation", @@ -68,7 +67,7 @@ public class SwitchSecureStore extends SiteProgram { SitePaths sitePaths = new SitePaths(getSitePath()); Path newSecureStorePath = Paths.get(newSecureStoreLib); if (!Files.exists(newSecureStorePath)) { - log.error("File {} doesn't exist", newSecureStorePath.toAbsolutePath()); + logger.atSevere().log("File %s doesn't exist", newSecureStorePath.toAbsolutePath()); return -1; } @@ -76,18 +75,22 @@ public class SwitchSecureStore extends SiteProgram { String currentSecureStoreName = getCurrentSecureStoreClassName(sitePaths); if (currentSecureStoreName.equals(newSecureStore)) { - log.error( - "Old and new SecureStore implementation names are the same. Migration will not work"); + logger + .atSevere() + .log( + "Old and new SecureStore implementation names " + + "are the same. Migration will not work"); return -1; } IoUtil.loadJARs(newSecureStorePath); SiteLibraryLoaderUtil.loadSiteLib(sitePaths.lib_dir); - log.info( - "Current secureStoreClass property ({}) will be replaced with {}", - currentSecureStoreName, - newSecureStore); + logger + .atInfo() + .log( + "Current secureStoreClass property (%s) will be replaced with %s", + currentSecureStoreName, newSecureStore); Injector dbInjector = createDbInjector(SINGLE_USER); SecureStore currentStore = getSecureStore(currentSecureStoreName, dbInjector); SecureStore newStore = getSecureStore(newSecureStore, dbInjector); @@ -103,7 +106,7 @@ public class SwitchSecureStore extends SiteProgram { } private void migrateProperties(SecureStore currentStore, SecureStore newStore) { - log.info("Migrate entries"); + logger.atInfo().log("Migrate entries"); for (EntryKey key : currentStore.list()) { String[] value = currentStore.getList(key.section, key.subsection, key.name); if (value != null) { @@ -122,26 +125,35 @@ public class SwitchSecureStore extends SiteProgram { private void removeOldLib(SitePaths sitePaths, String currentSecureStoreName) throws IOException { Path oldSecureStore = findJarWithSecureStore(sitePaths, currentSecureStoreName); if (oldSecureStore != null) { - log.info("Removing old SecureStore ({}) from lib/ directory", oldSecureStore.getFileName()); + logger + .atInfo() + .log("Removing old SecureStore (%s) from lib/ directory", oldSecureStore.getFileName()); try { Files.delete(oldSecureStore); } catch (IOException e) { - log.error("Cannot remove {}", oldSecureStore.toAbsolutePath(), e); + logger.atSevere().withCause(e).log("Cannot remove %s", oldSecureStore.toAbsolutePath()); } } else { - log.info( - "Cannot find jar with old SecureStore ({}) in lib/ directory", currentSecureStoreName); + logger + .atInfo() + .log( + "Cannot find jar with old SecureStore (%s) in lib/ directory", + currentSecureStoreName); } } private void copyNewLib(SitePaths sitePaths, Path newSecureStorePath) throws IOException { - log.info("Copy new SecureStore ({}) into lib/ directory", newSecureStorePath.getFileName()); + logger + .atInfo() + .log("Copy new SecureStore (%s) into lib/ directory", newSecureStorePath.getFileName()); Files.copy(newSecureStorePath, sitePaths.lib_dir.resolve(newSecureStorePath.getFileName())); } private void updateGerritConfig(SitePaths sitePaths, String newSecureStore) throws IOException, ConfigInvalidException { - log.info("Set gerrit.secureStoreClass property of gerrit.config to {}", newSecureStore); + logger + .atInfo() + .log("Set gerrit.secureStoreClass property of gerrit.config to %s", newSecureStore); FileBasedConfig config = new FileBasedConfig(sitePaths.gerrit_config.toFile(), FS.DETECTED); config.load(); config.setString("gerrit", null, "secureStoreClass", newSecureStore); @@ -197,7 +209,7 @@ public class SwitchSecureStore extends SiteProgram { return jar; } } catch (IOException e) { - log.error(e.getMessage(), e); + logger.atSevere().withCause(e).log(e.getMessage()); } } return null; diff --git a/java/com/google/gerrit/pgm/WarDistribution.java b/java/com/google/gerrit/pgm/WarDistribution.java index 37ce9953fb..257fb4ee39 100644 --- a/java/com/google/gerrit/pgm/WarDistribution.java +++ b/java/com/google/gerrit/pgm/WarDistribution.java @@ -17,6 +17,7 @@ package com.google.gerrit.pgm; import static com.google.gerrit.pgm.init.InitPlugins.JAR; import static com.google.gerrit.pgm.init.InitPlugins.PLUGIN_DIR; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.launcher.GerritLauncher; import com.google.gerrit.pgm.init.PluginsDistribution; import com.google.inject.Singleton; @@ -28,12 +29,10 @@ import java.util.Enumeration; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class WarDistribution implements PluginsDistribution { - private static final Logger log = LoggerFactory.getLogger(WarDistribution.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); @Override public void foreach(Processor processor) throws IOException { @@ -53,8 +52,7 @@ public class WarDistribution implements PluginsDistribution { try (InputStream in = zf.getInputStream(ze)) { processor.process(pluginName, in); } catch (IOException ioe) { - log.error( - String.format("Error opening plugin %s: %s", ze.getName(), ioe.getMessage())); + logger.atSevere().log("Error opening plugin %s: %s", ze.getName(), ioe.getMessage()); } } } diff --git a/java/com/google/gerrit/pgm/http/jetty/BUILD b/java/com/google/gerrit/pgm/http/jetty/BUILD index 86961d609b..6dc63658a2 100644 --- a/java/com/google/gerrit/pgm/http/jetty/BUILD +++ b/java/com/google/gerrit/pgm/http/jetty/BUILD @@ -13,6 +13,7 @@ java_library( "//java/com/google/gwtexpui/server", "//lib:guava", "//lib:servlet-api-3_1", + "//lib/flogger:api", "//lib/guice", "//lib/guice:guice-assistedinject", "//lib/guice:guice-servlet", @@ -20,7 +21,6 @@ java_library( "//lib/jetty:server", "//lib/jetty:servlet", "//lib/jgit/org.eclipse.jgit:jgit", - "//lib/log:api", "//lib/log:log4j", ], ) diff --git a/java/com/google/gerrit/pgm/http/jetty/HiddenErrorHandler.java b/java/com/google/gerrit/pgm/http/jetty/HiddenErrorHandler.java index 2fbbb97282..9347171aaf 100644 --- a/java/com/google/gerrit/pgm/http/jetty/HiddenErrorHandler.java +++ b/java/com/google/gerrit/pgm/http/jetty/HiddenErrorHandler.java @@ -17,6 +17,7 @@ package com.google.gerrit.pgm.http.jetty; import static java.nio.charset.StandardCharsets.ISO_8859_1; import com.google.common.base.Strings; +import com.google.common.flogger.FluentLogger; import com.google.gwtexpui.server.CacheHeaders; import java.io.IOException; import javax.servlet.ServletOutputStream; @@ -27,11 +28,9 @@ import org.eclipse.jetty.http.HttpStatus; import org.eclipse.jetty.server.HttpConnection; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.handler.ErrorHandler; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; class HiddenErrorHandler extends ErrorHandler { - private static final Logger log = LoggerFactory.getLogger(HiddenErrorHandler.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); @Override public void handle( @@ -79,7 +78,7 @@ class HiddenErrorHandler extends ErrorHandler { if (!Strings.isNullOrEmpty(req.getQueryString())) { uri += "?" + req.getQueryString(); } - log.error("Error in {} {}", req.getMethod(), uri, err); + logger.atSevere().withCause(err).log("Error in %s %s", req.getMethod(), uri); } } } diff --git a/java/com/google/gerrit/pgm/init/BUILD b/java/com/google/gerrit/pgm/init/BUILD index 4b53b67a3f..c781a60df4 100644 --- a/java/com/google/gerrit/pgm/init/BUILD +++ b/java/com/google/gerrit/pgm/init/BUILD @@ -23,9 +23,9 @@ java_library( "//lib:gwtorm", "//lib:h2", "//lib/commons:validator", + "//lib/flogger:api", "//lib/guice", "//lib/guice:guice-assistedinject", "//lib/jgit/org.eclipse.jgit:jgit", - "//lib/log:api", ], ) diff --git a/java/com/google/gerrit/pgm/init/BaseInit.java b/java/com/google/gerrit/pgm/init/BaseInit.java index 88e48aa4e5..56f31e33a8 100644 --- a/java/com/google/gerrit/pgm/init/BaseInit.java +++ b/java/com/google/gerrit/pgm/init/BaseInit.java @@ -21,6 +21,7 @@ import static com.google.inject.Stage.PRODUCTION; import com.google.common.base.MoreObjects; import com.google.common.base.Strings; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Die; import com.google.gerrit.common.IoUtil; import com.google.gerrit.metrics.DisabledMetricMaker; @@ -75,12 +76,10 @@ import java.util.Collections; import java.util.List; import java.util.Set; import javax.sql.DataSource; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Initialize a new Gerrit installation. */ public class BaseInit extends SiteProgram { - private static final Logger log = LoggerFactory.getLogger(BaseInit.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final boolean standalone; private final boolean initDb; @@ -205,7 +204,9 @@ public class BaseInit extends SiteProgram { } return names; } catch (FileNotFoundException e) { - log.warn("Couldn't find distribution archive location. No plugin will be installed"); + logger + .atWarning() + .log("Couldn't find distribution archive location. No plugin will be installed"); return null; } } diff --git a/java/com/google/gerrit/pgm/init/api/AllProjectsConfig.java b/java/com/google/gerrit/pgm/init/api/AllProjectsConfig.java index 5073200f38..e95e155290 100644 --- a/java/com/google/gerrit/pgm/init/api/AllProjectsConfig.java +++ b/java/com/google/gerrit/pgm/init/api/AllProjectsConfig.java @@ -14,6 +14,7 @@ package com.google.gerrit.pgm.init.api; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.reviewdb.client.RefNames; import com.google.gerrit.server.config.SitePaths; @@ -26,11 +27,9 @@ import org.eclipse.jgit.lib.CommitBuilder; import org.eclipse.jgit.lib.Config; import org.eclipse.jgit.lib.PersonIdent; import org.eclipse.jgit.lib.RepositoryCache; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class AllProjectsConfig extends VersionedMetaDataOnInit { - private static final Logger log = LoggerFactory.getLogger(AllProjectsConfig.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private Config cfg; private GroupList groupList; @@ -64,7 +63,10 @@ public class AllProjectsConfig extends VersionedMetaDataOnInit { return GroupList.parse( new Project.NameKey(project), readUTF8(GroupList.FILE_NAME), - error -> log.error("Error parsing file {}: {}", GroupList.FILE_NAME, error.getMessage())); + error -> + logger + .atSevere() + .log("Error parsing file %s: %s", GroupList.FILE_NAME, error.getMessage())); } public void save(String pluginName, String message) throws IOException, ConfigInvalidException { diff --git a/java/com/google/gerrit/pgm/init/api/BUILD b/java/com/google/gerrit/pgm/init/api/BUILD index d84261c607..bc418dde5c 100644 --- a/java/com/google/gerrit/pgm/init/api/BUILD +++ b/java/com/google/gerrit/pgm/init/api/BUILD @@ -9,9 +9,9 @@ java_library( "//java/com/google/gerrit/server", "//lib:guava", "//lib:gwtorm", + "//lib/flogger:api", "//lib/guice", "//lib/guice:guice-assistedinject", "//lib/jgit/org.eclipse.jgit:jgit", - "//lib/log:api", ], ) diff --git a/java/com/google/gerrit/pgm/util/BUILD b/java/com/google/gerrit/pgm/util/BUILD index 8f3bd4b273..7fe3bfa78d 100644 --- a/java/com/google/gerrit/pgm/util/BUILD +++ b/java/com/google/gerrit/pgm/util/BUILD @@ -24,7 +24,6 @@ java_library( "//lib/flogger:api", "//lib/guice", "//lib/jgit/org.eclipse.jgit:jgit", - "//lib/log:api", "//lib/log:jsonevent-layout", "//lib/log:log4j", ], diff --git a/java/com/google/gerrit/pgm/util/LogFileCompressor.java b/java/com/google/gerrit/pgm/util/LogFileCompressor.java index 8d04be89f3..413e0fab4e 100644 --- a/java/com/google/gerrit/pgm/util/LogFileCompressor.java +++ b/java/com/google/gerrit/pgm/util/LogFileCompressor.java @@ -17,6 +17,7 @@ package com.google.gerrit.pgm.util; import static java.util.concurrent.TimeUnit.HOURS; import static java.util.concurrent.TimeUnit.MILLISECONDS; +import com.google.common.flogger.FluentLogger; import com.google.common.io.ByteStreams; import com.google.gerrit.extensions.events.LifecycleListener; import com.google.gerrit.lifecycle.LifecycleModule; @@ -36,12 +37,10 @@ import java.time.temporal.ChronoUnit; import java.util.concurrent.Future; import java.util.zip.GZIPOutputStream; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Compresses the old error logs. */ public class LogFileCompressor implements Runnable { - private static final Logger log = LoggerFactory.getLogger(LogFileCompressor.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static class Module extends LifecycleModule { @Override @@ -113,10 +112,10 @@ public class LogFileCompressor implements Runnable { } } } catch (IOException e) { - log.error("Error listing logs to compress in " + logs_dir, e); + logger.atSevere().withCause(e).log("Error listing logs to compress in %s", logs_dir); } } catch (Exception e) { - log.error("Failed to compress log files: " + e.getMessage(), e); + logger.atSevere().withCause(e).log("Failed to compress log files: %s", e.getMessage()); } } @@ -156,11 +155,11 @@ public class LogFileCompressor implements Runnable { } Files.delete(src); } catch (IOException e) { - log.error("Cannot compress " + src, e); + logger.atSevere().withCause(e).log("Cannot compress %s", src); try { Files.deleteIfExists(tmp); } catch (IOException e2) { - log.warn("Failed to delete temporary log file " + tmp, e2); + logger.atWarning().withCause(e2).log("Failed to delete temporary log file %s", tmp); } } } diff --git a/java/com/google/gerrit/pgm/util/RuntimeShutdown.java b/java/com/google/gerrit/pgm/util/RuntimeShutdown.java index c9df7e749a..c5e856780f 100644 --- a/java/com/google/gerrit/pgm/util/RuntimeShutdown.java +++ b/java/com/google/gerrit/pgm/util/RuntimeShutdown.java @@ -14,10 +14,9 @@ package com.google.gerrit.pgm.util; +import com.google.common.flogger.FluentLogger; import java.util.ArrayList; import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class RuntimeShutdown { private static final ShutdownCallback cb = new ShutdownCallback(); @@ -45,7 +44,7 @@ public class RuntimeShutdown { private RuntimeShutdown() {} private static class ShutdownCallback extends Thread { - private static final Logger log = LoggerFactory.getLogger(ShutdownCallback.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final List tasks = new ArrayList<>(); private boolean shutdownStarted; @@ -72,7 +71,7 @@ public class RuntimeShutdown { @Override public void run() { - log.debug("Graceful shutdown requested"); + logger.atFine().log("Graceful shutdown requested"); List taskList; synchronized (this) { @@ -84,11 +83,11 @@ public class RuntimeShutdown { try { task.run(); } catch (Exception err) { - log.error("Cleanup task failed", err); + logger.atSevere().withCause(err).log("Cleanup task failed"); } } - log.debug("Shutdown complete"); + logger.atFine().log("Shutdown complete"); synchronized (this) { shutdownComplete = true; diff --git a/java/com/google/gerrit/pgm/util/ThreadLimiter.java b/java/com/google/gerrit/pgm/util/ThreadLimiter.java index d609c34cb6..64f703bd22 100644 --- a/java/com/google/gerrit/pgm/util/ThreadLimiter.java +++ b/java/com/google/gerrit/pgm/util/ThreadLimiter.java @@ -14,19 +14,18 @@ package com.google.gerrit.pgm.util; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.server.config.GerritServerConfig; import com.google.gerrit.server.config.ThreadSettingsConfig; import com.google.gerrit.server.schema.DataSourceType; import com.google.inject.Injector; import com.google.inject.Key; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; // TODO(dborowitz): Not necessary once we switch to NoteDb. /** Utility to limit threads used by a batch program. */ public class ThreadLimiter { - private static final Logger log = LoggerFactory.getLogger(ThreadLimiter.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static int limitThreads(Injector dbInjector, int threads) { return limitThreads( @@ -41,7 +40,7 @@ public class ThreadLimiter { boolean usePool = cfg.getBoolean("database", "connectionpool", dst.usePool()); int poolLimit = threadSettingsConfig.getDatabasePoolLimit(); if (usePool && threads > poolLimit) { - log.warn("Limiting program to " + poolLimit + " threads due to database.poolLimit"); + logger.atWarning().log("Limiting program to %d threads due to database.poolLimit", poolLimit); return poolLimit; } return threads; From 6ed96ca40bc04d62c8cb47758ec9f7e28eca41fc Mon Sep 17 00:00:00 2001 From: Edwin Kempin Date: Tue, 8 May 2018 10:12:57 +0200 Subject: [PATCH 7/9] Migrate all remaining classes to Flogger This is the next part of the migration to Flogger. This change migrates all remaining classes Flogger. This means all classes in Gerrit core now use Flogger. During this migration we try to make the log statements more consistent: - avoid string concatenation - avoid usage of String.format(...) The visibility of the slf4j library is restricted to plugins and jgit now. This avoids that we accidentally add new dependencies to slf4j. Change-Id: Ide573327315a15cde69b68b5f27934deeb790d37 Signed-off-by: Edwin Kempin --- WORKSPACE | 6 --- gerrit-gwtdebug/BUILD | 2 +- .../gwtdebug/GerritGwtDebugLauncher.java | 11 +++--- java/com/google/gerrit/acceptance/BUILD | 2 +- java/com/google/gerrit/asciidoctor/BUILD | 2 - java/com/google/gerrit/common/BUILD | 4 +- .../gerrit/common/SiteLibraryLoaderUtil.java | 9 ++--- java/com/google/gerrit/common/Version.java | 7 ++-- .../elasticsearch/AbstractElasticIndex.java | 7 ++-- java/com/google/gerrit/elasticsearch/BUILD | 2 +- .../ElasticIndexVersionManager.java | 9 ++--- .../ElasticRestClientProvider.java | 9 ++--- java/com/google/gerrit/gpg/BUILD | 2 +- .../gerrit/gpg/GerritPublicKeyChecker.java | 7 ++-- java/com/google/gerrit/gpg/GpgModule.java | 7 ++-- .../google/gerrit/gpg/PublicKeyChecker.java | 16 ++++---- .../gerrit/gpg/PushCertificateChecker.java | 7 ++-- .../google/gerrit/gpg/SignedPushModule.java | 17 ++++---- .../com/google/gerrit/gpg/server/GpgKeys.java | 9 +++-- .../google/gerrit/gpg/server/PostGpgKeys.java | 16 ++++---- java/com/google/gerrit/index/BUILD | 2 +- java/com/google/gerrit/index/Schema.java | 12 +++--- java/com/google/gerrit/index/SiteIndexer.java | 7 ++-- java/com/google/gerrit/lifecycle/BUILD | 2 +- .../gerrit/lifecycle/LifecycleManager.java | 6 ++- .../gerrit/lucene/AbstractLuceneIndex.java | 39 ++++++++++--------- java/com/google/gerrit/lucene/BUILD | 2 +- .../gerrit/lucene/LuceneChangeIndex.java | 7 ++-- .../gerrit/lucene/LuceneVersionManager.java | 11 +++--- java/com/google/gerrit/metrics/BUILD | 2 +- .../proc/OperatingSystemMXBeanProvider.java | 9 ++--- java/com/google/gerrit/testing/BUILD | 2 +- .../gerrit/testing/FakeEmailSender.java | 7 ++-- .../google/gerrit/testing/NoteDbChecker.java | 7 ++-- java/gerrit/BUILD | 2 +- java/gerrit/PRED_uploader_1.java | 13 ++++--- java/org/apache/commons/net/BUILD | 1 - .../gerrit/acceptance/ssh/SshCommandsIT.java | 7 ++-- javatests/com/google/gerrit/gpg/BUILD | 2 +- lib/log/BUILD | 13 ++----- 40 files changed, 142 insertions(+), 162 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index ef9e9f6069..924eab8efe 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -251,12 +251,6 @@ maven_jar( sha1 = "2b8019b6249bb05d81d3a3094e468753e2b21311", ) -maven_jar( - name = "log_nop", - artifact = "org.slf4j:slf4j-nop:" + SLF4J_VERS, - sha1 = "6cca9a3b999ff28b7a35ca762b3197cd7e4c2ad1", -) - maven_jar( name = "log_ext", artifact = "org.slf4j:slf4j-ext:" + SLF4J_VERS, diff --git a/gerrit-gwtdebug/BUILD b/gerrit-gwtdebug/BUILD index b4cd663036..f564745877 100644 --- a/gerrit-gwtdebug/BUILD +++ b/gerrit-gwtdebug/BUILD @@ -6,11 +6,11 @@ java_library( "//java/com/google/gerrit/pgm", "//java/com/google/gerrit/pgm/util", "//java/com/google/gerrit/util/cli", + "//lib/flogger:api", "//lib/gwt:dev", "//lib/jetty:server", "//lib/jetty:servlet", "//lib/jetty:servlets", - "//lib/log:api", "//lib/log:log4j", ], ) diff --git a/gerrit-gwtdebug/src/main/java/com/google/gerrit/gwtdebug/GerritGwtDebugLauncher.java b/gerrit-gwtdebug/src/main/java/com/google/gerrit/gwtdebug/GerritGwtDebugLauncher.java index 4edff0e821..cf84919714 100644 --- a/gerrit-gwtdebug/src/main/java/com/google/gerrit/gwtdebug/GerritGwtDebugLauncher.java +++ b/gerrit-gwtdebug/src/main/java/com/google/gerrit/gwtdebug/GerritGwtDebugLauncher.java @@ -14,16 +14,15 @@ package com.google.gerrit.gwtdebug; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.pgm.Daemon; import com.google.gwt.dev.codeserver.CodeServer; import com.google.gwt.dev.codeserver.Options; import java.util.ArrayList; import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; class GerritGwtDebugLauncher { - private static final Logger log = LoggerFactory.getLogger(GerritGwtDebugLauncher.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static void main(String[] argv) throws Exception { GerritGwtDebugLauncher launcher = new GerritGwtDebugLauncher(); @@ -54,7 +53,7 @@ class GerritGwtDebugLauncher { Options options = new Options(); if (!options.parseArgs(sdmLauncherOptions.toArray(new String[sdmLauncherOptions.size()]))) { - log.error("Failed to parse codeserver arguments"); + logger.atSevere().log("Failed to parse codeserver arguments"); return 1; } @@ -65,11 +64,11 @@ class GerritGwtDebugLauncher { new Daemon() .main(daemonLauncherOptions.toArray(new String[daemonLauncherOptions.size()])); if (r != 0) { - log.error("Daemon exited with return code: " + r); + logger.atSevere().log("Daemon exited with return code: %d", r); return 1; } } catch (Exception e) { - log.error("Cannot start daemon", e); + logger.atSevere().withCause(e).log("Cannot start daemon"); return 1; } diff --git a/java/com/google/gerrit/acceptance/BUILD b/java/com/google/gerrit/acceptance/BUILD index 9587860fb5..770805b69c 100644 --- a/java/com/google/gerrit/acceptance/BUILD +++ b/java/com/google/gerrit/acceptance/BUILD @@ -42,11 +42,11 @@ java_library( "//lib/bouncycastle:bcpg", "//lib/bouncycastle:bcprov", "//lib/commons:compress", + "//lib/flogger:api", "//lib/guice", "//lib/guice:guice-assistedinject", "//lib/guice:guice-servlet", "//lib/jgit/org.eclipse.jgit:jgit", - "//lib/log:api", "//lib/mina:sshd", "//prolog:gerrit-prolog-common", ], diff --git a/java/com/google/gerrit/asciidoctor/BUILD b/java/com/google/gerrit/asciidoctor/BUILD index b2b0f5d8dc..f5178a0939 100644 --- a/java/com/google/gerrit/asciidoctor/BUILD +++ b/java/com/google/gerrit/asciidoctor/BUILD @@ -13,8 +13,6 @@ java_library( "//lib:args4j", "//lib:guava", "//lib/asciidoctor", - "//lib/log:api", - "//lib/log:nop", ], ) diff --git a/java/com/google/gerrit/common/BUILD b/java/com/google/gerrit/common/BUILD index 2565f0d1d0..800a975aba 100644 --- a/java/com/google/gerrit/common/BUILD +++ b/java/com/google/gerrit/common/BUILD @@ -24,8 +24,8 @@ gwt_module( "//lib:servlet-api-3_1", "//lib/auto:auto-value", "//lib/auto:auto-value-annotations", + "//lib/flogger:api", "//lib/jgit/org.eclipse.jgit:jgit", - "//lib/log:api", ], gwt_xml = "Common.gwt.xml", visibility = ["//visibility:public"], @@ -50,8 +50,8 @@ java_library( "//lib:servlet-api-3_1", "//lib/auto:auto-value", "//lib/auto:auto-value-annotations", + "//lib/flogger:api", "//lib/jgit/org.eclipse.jgit:jgit", - "//lib/log:api", ], ) diff --git a/java/com/google/gerrit/common/SiteLibraryLoaderUtil.java b/java/com/google/gerrit/common/SiteLibraryLoaderUtil.java index e8fa896662..04bb80fb2b 100644 --- a/java/com/google/gerrit/common/SiteLibraryLoaderUtil.java +++ b/java/com/google/gerrit/common/SiteLibraryLoaderUtil.java @@ -21,26 +21,25 @@ import com.google.common.annotations.GwtIncompatible; import com.google.common.collect.ComparisonChain; import com.google.common.collect.ImmutableList; import com.google.common.collect.Ordering; +import com.google.common.flogger.FluentLogger; import java.io.IOException; import java.nio.file.DirectoryStream; import java.nio.file.Files; import java.nio.file.NoSuchFileException; import java.nio.file.Path; import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @GwtIncompatible("Unemulated classes in java.nio and Guava") public final class SiteLibraryLoaderUtil { - private static final Logger log = LoggerFactory.getLogger(SiteLibraryLoaderUtil.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static void loadSiteLib(Path libdir) { try { List jars = listJars(libdir); IoUtil.loadJARs(jars); - log.debug("Loaded site libraries: {}", jarList(jars)); + logger.atFine().log("Loaded site libraries: %s", jarList(jars)); } catch (IOException e) { - log.error("Error scanning lib directory " + libdir, e); + logger.atSevere().withCause(e).log("Error scanning lib directory %s", libdir); } } diff --git a/java/com/google/gerrit/common/Version.java b/java/com/google/gerrit/common/Version.java index 1777c3cebb..b8d3b67637 100644 --- a/java/com/google/gerrit/common/Version.java +++ b/java/com/google/gerrit/common/Version.java @@ -18,16 +18,15 @@ import static java.nio.charset.StandardCharsets.UTF_8; import com.google.common.annotations.GwtIncompatible; import com.google.common.annotations.VisibleForTesting; +import com.google.common.flogger.FluentLogger; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @GwtIncompatible("Unemulated com.google.gerrit.common.Version") public class Version { - private static final Logger log = LoggerFactory.getLogger(Version.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); @VisibleForTesting static final String DEV = "(dev)"; @@ -57,7 +56,7 @@ public class Version { return vs; } } catch (IOException e) { - log.error(e.getMessage(), e); + logger.atSevere().withCause(e).log(e.getMessage()); return "(unknown version)"; } } diff --git a/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java b/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java index 320ebfa945..ee4869bbf8 100644 --- a/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java +++ b/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java @@ -23,6 +23,7 @@ import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.FluentIterable; import com.google.common.collect.ListMultimap; import com.google.common.collect.Lists; +import com.google.common.flogger.FluentLogger; import com.google.common.io.CharStreams; import com.google.gerrit.elasticsearch.builders.QueryBuilder; import com.google.gerrit.elasticsearch.builders.SearchSourceBuilder; @@ -69,11 +70,9 @@ import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ContentType; import org.apache.http.nio.entity.NStringEntity; import org.elasticsearch.client.Response; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; abstract class AbstractElasticIndex implements Index { - private static final Logger log = LoggerFactory.getLogger(AbstractElasticIndex.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); protected static final String BULK = "_bulk"; protected static final String IGNORE_UNMAPPED = "ignore_unmapped"; @@ -332,7 +331,7 @@ abstract class AbstractElasticIndex implements Index { } } } else { - log.error(statusLine.getReasonPhrase()); + logger.atSevere().log(statusLine.getReasonPhrase()); } final List r = Collections.unmodifiableList(results); return new ResultSet() { diff --git a/java/com/google/gerrit/elasticsearch/BUILD b/java/com/google/gerrit/elasticsearch/BUILD index b771cf57fb..31ede79f16 100644 --- a/java/com/google/gerrit/elasticsearch/BUILD +++ b/java/com/google/gerrit/elasticsearch/BUILD @@ -17,6 +17,7 @@ java_library( "//lib/commons:codec", "//lib/commons:lang", "//lib/elasticsearch-rest-client", + "//lib/flogger:api", "//lib/guice", "//lib/guice:guice-assistedinject", "//lib/httpcomponents:httpasyncclient", @@ -25,6 +26,5 @@ java_library( "//lib/httpcomponents:httpcore-nio", "//lib/jackson:jackson-core", "//lib/jgit/org.eclipse.jgit:jgit", - "//lib/log:api", ], ) diff --git a/java/com/google/gerrit/elasticsearch/ElasticIndexVersionManager.java b/java/com/google/gerrit/elasticsearch/ElasticIndexVersionManager.java index 612402ea78..58272f7874 100644 --- a/java/com/google/gerrit/elasticsearch/ElasticIndexVersionManager.java +++ b/java/com/google/gerrit/elasticsearch/ElasticIndexVersionManager.java @@ -15,6 +15,7 @@ package com.google.gerrit.elasticsearch; import com.google.common.base.Strings; +import com.google.common.flogger.FluentLogger; import com.google.common.primitives.Ints; import com.google.gerrit.extensions.registration.DynamicSet; import com.google.gerrit.index.Index; @@ -31,12 +32,10 @@ import java.io.IOException; import java.util.Collection; import java.util.TreeMap; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class ElasticIndexVersionManager extends VersionManager { - private static final Logger log = LoggerFactory.getLogger(ElasticIndexVersionManager.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final String prefix; private final ElasticIndexVersionDiscovery versionDiscovery; @@ -61,13 +60,13 @@ public class ElasticIndexVersionManager extends VersionManager { for (String version : versionDiscovery.discover(prefix, def.getName())) { Integer v = Ints.tryParse(version); if (v == null || version.length() != 4) { - log.warn("Unrecognized version in index {}: {}", def.getName(), version); + logger.atWarning().log("Unrecognized version in index %s: %s", def.getName(), version); continue; } versions.put(v, new Version(null, v, true, cfg.getReady(def.getName(), v))); } } catch (IOException e) { - log.error("Error scanning index: " + def.getName(), e); + logger.atSevere().withCause(e).log("Error scanning index: %s", def.getName()); } for (Schema schema : def.getSchemas().values()) { diff --git a/java/com/google/gerrit/elasticsearch/ElasticRestClientProvider.java b/java/com/google/gerrit/elasticsearch/ElasticRestClientProvider.java index 91f938c956..102305b81e 100644 --- a/java/com/google/gerrit/elasticsearch/ElasticRestClientProvider.java +++ b/java/com/google/gerrit/elasticsearch/ElasticRestClientProvider.java @@ -14,6 +14,7 @@ package com.google.gerrit.elasticsearch; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.events.LifecycleListener; import com.google.gerrit.lifecycle.LifecycleModule; import com.google.gson.JsonParser; @@ -32,12 +33,10 @@ import org.apache.http.impl.nio.client.HttpAsyncClientBuilder; import org.elasticsearch.client.Response; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestClientBuilder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton class ElasticRestClientProvider implements Provider, LifecycleListener { - private static final Logger log = LoggerFactory.getLogger(ElasticRestClientProvider.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final HttpHost[] hosts; private final String username; @@ -68,7 +67,7 @@ class ElasticRestClientProvider implements Provider, LifecycleListen if (client == null) { client = build(); ElasticVersion version = getVersion(); - log.info("Elasticsearch integration version {}", version); + logger.atInfo().log("Elasticsearch integration version %s", version); } } } @@ -117,7 +116,7 @@ class ElasticRestClientProvider implements Provider, LifecycleListen .getAsJsonObject() .get("number") .getAsString(); - log.info("Connected to Elasticsearch version {}", version); + logger.atInfo().log("Connected to Elasticsearch version %s", version); return ElasticVersion.forVersion(version); } catch (IOException e) { throw new FailedToGetVersion(e); diff --git a/java/com/google/gerrit/gpg/BUILD b/java/com/google/gerrit/gpg/BUILD index bd6edab3b6..0aa6ca2d79 100644 --- a/java/com/google/gerrit/gpg/BUILD +++ b/java/com/google/gerrit/gpg/BUILD @@ -11,9 +11,9 @@ java_library( "//lib:gwtorm", "//lib/bouncycastle:bcpg-neverlink", "//lib/bouncycastle:bcprov-neverlink", + "//lib/flogger:api", "//lib/guice", "//lib/guice:guice-assistedinject", "//lib/jgit/org.eclipse.jgit:jgit", - "//lib/log:api", ], ) diff --git a/java/com/google/gerrit/gpg/GerritPublicKeyChecker.java b/java/com/google/gerrit/gpg/GerritPublicKeyChecker.java index ffedcfbd8b..bc0cd899f8 100644 --- a/java/com/google/gerrit/gpg/GerritPublicKeyChecker.java +++ b/java/com/google/gerrit/gpg/GerritPublicKeyChecker.java @@ -20,6 +20,7 @@ import static com.google.gerrit.server.account.externalids.ExternalId.SCHEME_GPG import com.google.common.base.CharMatcher; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; +import com.google.common.flogger.FluentLogger; import com.google.common.io.BaseEncoding; import com.google.gerrit.common.PageLinks; import com.google.gerrit.server.IdentifiedUser; @@ -44,8 +45,6 @@ import org.bouncycastle.openpgp.PGPSignature; import org.bouncycastle.openpgp.operator.bc.BcPGPContentVerifierBuilderProvider; import org.eclipse.jgit.lib.Config; import org.eclipse.jgit.transport.PushCertificateIdent; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Checker for GPG public keys including Gerrit-specific checks. @@ -54,7 +53,7 @@ import org.slf4j.LoggerFactory; * ID in the database, or an email address thereof. */ public class GerritPublicKeyChecker extends PublicKeyChecker { - private static final Logger log = LoggerFactory.getLogger(GerritPublicKeyChecker.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); @Singleton public static class Factory { @@ -137,7 +136,7 @@ public class GerritPublicKeyChecker extends PublicKeyChecker { return checkIdsForArbitraryUser(key); } catch (PGPException | OrmException e) { String msg = "Error checking user IDs for key"; - log.warn(msg + " " + keyIdToString(key.getKeyID()), e); + logger.atWarning().withCause(e).log("%s %s", msg, keyIdToString(key.getKeyID())); return CheckResult.bad(msg); } } diff --git a/java/com/google/gerrit/gpg/GpgModule.java b/java/com/google/gerrit/gpg/GpgModule.java index d12e921ac4..45c1ab5aff 100644 --- a/java/com/google/gerrit/gpg/GpgModule.java +++ b/java/com/google/gerrit/gpg/GpgModule.java @@ -14,15 +14,14 @@ package com.google.gerrit.gpg; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.config.FactoryModule; import com.google.gerrit.gpg.api.GpgApiModule; import com.google.gerrit.server.EnableSignedPush; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class GpgModule extends FactoryModule { - private static final Logger log = LoggerFactory.getLogger(GpgModule.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final Config cfg; @@ -39,7 +38,7 @@ public class GpgModule extends FactoryModule { bindConstant().annotatedWith(EnableSignedPush.class).to(enableSignedPush); if (configEnableSignedPush && !havePgp) { - log.info("Bouncy Castle PGP not installed; signed push verification is disabled"); + logger.atInfo().log("Bouncy Castle PGP not installed; signed push verification is disabled"); } if (enableSignedPush) { install(new SignedPushModule()); diff --git a/java/com/google/gerrit/gpg/PublicKeyChecker.java b/java/com/google/gerrit/gpg/PublicKeyChecker.java index 70e9a243cb..bd6e0d787b 100644 --- a/java/com/google/gerrit/gpg/PublicKeyChecker.java +++ b/java/com/google/gerrit/gpg/PublicKeyChecker.java @@ -28,6 +28,7 @@ import static org.bouncycastle.bcpg.sig.RevocationReasonTags.NO_REASON; import static org.bouncycastle.openpgp.PGPSignature.DIRECT_KEY; import static org.bouncycastle.openpgp.PGPSignature.KEY_REVOCATION; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.common.GpgKeyInfo.Status; import java.io.IOException; import java.util.ArrayList; @@ -49,12 +50,10 @@ import org.bouncycastle.openpgp.PGPPublicKeyRing; import org.bouncycastle.openpgp.PGPPublicKeyRingCollection; import org.bouncycastle.openpgp.PGPSignature; import org.bouncycastle.openpgp.operator.bc.BcPGPContentVerifierBuilderProvider; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Checker for GPG public keys for use in a push certificate. */ public class PublicKeyChecker { - private static final Logger log = LoggerFactory.getLogger(PublicKeyChecker.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); // https://tools.ietf.org/html/rfc4880#section-5.2.3.13 private static final int COMPLETE_TRUST = 120; @@ -294,12 +293,11 @@ public class PublicKeyChecker { // Revoker is authorized and there is a revocation signature by this // revoker, but the key is not in the store so we can't verify the // signature. - log.info( - "Key " - + Fingerprint.toString(key.getFingerprint()) - + " is revoked by " - + Fingerprint.toString(rfp) - + ", which is not in the store. Assuming revocation is valid."); + logger + .atInfo() + .log( + "Key %s is revoked by %s, which is not in the store. Assuming revocation is valid.", + Fingerprint.toString(key.getFingerprint()), Fingerprint.toString(rfp)); problems.add(reasonToString(getRevocationReason(revocation))); continue; } diff --git a/java/com/google/gerrit/gpg/PushCertificateChecker.java b/java/com/google/gerrit/gpg/PushCertificateChecker.java index 95b89d08b8..82b3892364 100644 --- a/java/com/google/gerrit/gpg/PushCertificateChecker.java +++ b/java/com/google/gerrit/gpg/PushCertificateChecker.java @@ -21,6 +21,7 @@ import static com.google.gerrit.gpg.PublicKeyStore.keyIdToString; import static com.google.gerrit.gpg.PublicKeyStore.keyToString; import com.google.common.base.Joiner; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.common.GpgKeyInfo.Status; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -38,12 +39,10 @@ import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.transport.PushCertificate; import org.eclipse.jgit.transport.PushCertificate.NonceStatus; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Checker for push certificates. */ public abstract class PushCertificateChecker { - private static final Logger log = LoggerFactory.getLogger(PushCertificateChecker.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static class Result { private final PGPPublicKey key; @@ -107,7 +106,7 @@ public abstract class PushCertificateChecker { } } catch (PGPException | IOException e) { String msg = "Internal error checking push certificate"; - log.error(msg, e); + logger.atSevere().withCause(e).log(msg); results.add(CheckResult.bad(msg)); } diff --git a/java/com/google/gerrit/gpg/SignedPushModule.java b/java/com/google/gerrit/gpg/SignedPushModule.java index c420f6f727..58d2228109 100644 --- a/java/com/google/gerrit/gpg/SignedPushModule.java +++ b/java/com/google/gerrit/gpg/SignedPushModule.java @@ -15,6 +15,7 @@ package com.google.gerrit.gpg; import com.google.common.base.Strings; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.registration.DynamicSet; import com.google.gerrit.reviewdb.client.BooleanProjectConfig; import com.google.gerrit.reviewdb.client.Project; @@ -42,11 +43,9 @@ import org.eclipse.jgit.transport.PreReceiveHook; import org.eclipse.jgit.transport.PreReceiveHookChain; import org.eclipse.jgit.transport.ReceivePack; import org.eclipse.jgit.transport.SignedPushConfig; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; class SignedPushModule extends AbstractModule { - private static final Logger log = LoggerFactory.getLogger(SignedPushModule.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); @Override protected void configure() { @@ -93,11 +92,13 @@ class SignedPushModule extends AbstractModule { rp.setSignedPushConfig(null); return; } else if (signedPushConfig == null) { - log.error( - "receive.enableSignedPush is true for project {} but" - + " false in gerrit.config, so signed push verification is" - + " disabled", - project.get()); + logger + .atSevere() + .log( + "receive.enableSignedPush is true for project %s but" + + " false in gerrit.config, so signed push verification is" + + " disabled", + project.get()); rp.setSignedPushConfig(null); return; } diff --git a/java/com/google/gerrit/gpg/server/GpgKeys.java b/java/com/google/gerrit/gpg/server/GpgKeys.java index 4fd30a73e7..b1c9f29522 100644 --- a/java/com/google/gerrit/gpg/server/GpgKeys.java +++ b/java/com/google/gerrit/gpg/server/GpgKeys.java @@ -19,6 +19,7 @@ import static java.nio.charset.StandardCharsets.UTF_8; import com.google.common.base.CharMatcher; import com.google.common.collect.ImmutableList; +import com.google.common.flogger.FluentLogger; import com.google.common.io.BaseEncoding; import com.google.gerrit.extensions.common.GpgKeyInfo; import com.google.gerrit.extensions.registration.DynamicMap; @@ -53,12 +54,10 @@ import org.bouncycastle.openpgp.PGPException; import org.bouncycastle.openpgp.PGPPublicKey; import org.bouncycastle.openpgp.PGPPublicKeyRing; import org.eclipse.jgit.util.NB; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class GpgKeys implements ChildCollection { - private static final Logger log = LoggerFactory.getLogger(GpgKeys.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static final String MIME_TYPE = "application/pgp-keys"; @@ -164,7 +163,9 @@ public class GpgKeys implements ChildCollection { } } if (!found) { - log.warn("No public key stored for fingerprint {}", Fingerprint.toString(fp)); + logger + .atWarning() + .log("No public key stored for fingerprint %s", Fingerprint.toString(fp)); } } } diff --git a/java/com/google/gerrit/gpg/server/PostGpgKeys.java b/java/com/google/gerrit/gpg/server/PostGpgKeys.java index 4b92ec37b5..90104ddf03 100644 --- a/java/com/google/gerrit/gpg/server/PostGpgKeys.java +++ b/java/com/google/gerrit/gpg/server/PostGpgKeys.java @@ -24,6 +24,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import com.google.common.flogger.FluentLogger; import com.google.common.io.BaseEncoding; import com.google.gerrit.common.errors.EmailException; import com.google.gerrit.extensions.api.accounts.GpgKeysInput; @@ -70,12 +71,11 @@ import org.eclipse.jgit.errors.ConfigInvalidException; import org.eclipse.jgit.lib.CommitBuilder; import org.eclipse.jgit.lib.PersonIdent; import org.eclipse.jgit.lib.RefUpdate; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class PostGpgKeys implements RestModifyView { - private final Logger log = LoggerFactory.getLogger(getClass()); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + private final Provider serverIdent; private final Provider self; private final Provider storeProvider; @@ -223,10 +223,12 @@ public class PostGpgKeys implements RestModifyView { + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + public static class Builder { private final List> fields = new ArrayList<>(); @@ -58,8 +59,6 @@ public class Schema { } } - private static final Logger log = LoggerFactory.getLogger(Schema.class); - public static class Values { private final FieldDef field; private final Iterable values; @@ -184,7 +183,10 @@ public class Schema { try { v = f.get(obj); } catch (OrmException e) { - log.error("error getting field {} of {}", f.getName(), obj, e); + logger + .atSevere() + .withCause(e) + .log("error getting field %s of %s", f.getName(), obj); return null; } if (v == null) { diff --git a/java/com/google/gerrit/index/SiteIndexer.java b/java/com/google/gerrit/index/SiteIndexer.java index 4ad082781d..24b7a6910b 100644 --- a/java/com/google/gerrit/index/SiteIndexer.java +++ b/java/com/google/gerrit/index/SiteIndexer.java @@ -17,6 +17,7 @@ package com.google.gerrit.index; import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.base.Stopwatch; +import com.google.common.flogger.FluentLogger; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.MoreExecutors; import java.io.OutputStream; @@ -27,11 +28,9 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import org.eclipse.jgit.lib.ProgressMonitor; import org.eclipse.jgit.util.io.NullOutputStream; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public abstract class SiteIndexer> { - private static final Logger log = LoggerFactory.getLogger(SiteIndexer.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static class Result { private final long elapsedNanos; @@ -128,7 +127,7 @@ public abstract class SiteIndexer> { } private void fail(Throwable t) { - log.error("Failed to index " + desc, t); + logger.atSevere().withCause(t).log("Failed to index %s", desc); ok.set(false); } diff --git a/java/com/google/gerrit/lifecycle/BUILD b/java/com/google/gerrit/lifecycle/BUILD index 191305b6a4..7ba6123b92 100644 --- a/java/com/google/gerrit/lifecycle/BUILD +++ b/java/com/google/gerrit/lifecycle/BUILD @@ -5,7 +5,7 @@ java_library( deps = [ "//java/com/google/gerrit/extensions:api", "//lib:guava", + "//lib/flogger:api", "//lib/guice", - "//lib/log:api", ], ) diff --git a/java/com/google/gerrit/lifecycle/LifecycleManager.java b/java/com/google/gerrit/lifecycle/LifecycleManager.java index bbffd49cf9..ba3d7b2e2e 100644 --- a/java/com/google/gerrit/lifecycle/LifecycleManager.java +++ b/java/com/google/gerrit/lifecycle/LifecycleManager.java @@ -16,6 +16,7 @@ package com.google.gerrit.lifecycle; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.events.LifecycleListener; import com.google.gerrit.extensions.registration.RegistrationHandle; import com.google.inject.Binding; @@ -24,10 +25,11 @@ import com.google.inject.Provider; import com.google.inject.TypeLiteral; import com.google.inject.util.Providers; import java.util.List; -import org.slf4j.LoggerFactory; /** Tracks and executes registered {@link LifecycleListener}s. */ public class LifecycleManager { + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); + private final List> listeners = newList(); private final List handles = newList(); @@ -105,7 +107,7 @@ public class LifecycleManager { try { obj.stop(); } catch (Throwable err) { - LoggerFactory.getLogger(obj.getClass()).warn("Failed to stop", err); + logger.atWarning().withCause(err).log("Failed to stop %s", obj.getClass()); } startedIndex = i - 1; } diff --git a/java/com/google/gerrit/lucene/AbstractLuceneIndex.java b/java/com/google/gerrit/lucene/AbstractLuceneIndex.java index 3e6d79be14..6e3086c3a9 100644 --- a/java/com/google/gerrit/lucene/AbstractLuceneIndex.java +++ b/java/com/google/gerrit/lucene/AbstractLuceneIndex.java @@ -22,6 +22,7 @@ import com.google.common.base.Joiner; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ListMultimap; import com.google.common.collect.Sets; +import com.google.common.flogger.FluentLogger; import com.google.common.util.concurrent.AbstractFuture; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; @@ -80,12 +81,10 @@ import org.apache.lucene.search.Sort; import org.apache.lucene.search.TopFieldDocs; import org.apache.lucene.store.AlreadyClosedException; import org.apache.lucene.store.Directory; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Basic Lucene index implementation. */ public abstract class AbstractLuceneIndex implements Index { - private static final Logger log = LoggerFactory.getLogger(AbstractLuceneIndex.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); static String sortFieldName(FieldDef f) { return f.getName() + "_SORT"; @@ -145,18 +144,19 @@ public abstract class AbstractLuceneIndex implements Index { autoCommitWriter.commit(); } } catch (IOException e) { - log.error("Error committing " + index + " Lucene index", e); + logger.atSevere().withCause(e).log("Error committing %s Lucene index", index); } catch (OutOfMemoryError e) { - log.error("Error committing " + index + " Lucene index", e); + logger.atSevere().withCause(e).log("Error committing %s Lucene index", index); try { autoCommitWriter.close(); } catch (IOException e2) { - log.error( - "SEVERE: Error closing " - + index - + " Lucene index after OOM;" - + " index may be corrupted.", - e); + logger + .atSevere() + .withCause(e) + .log( + "SEVERE: Error closing %s Lucene index after OOM;" + + " index may be corrupted.", + index); } } }, @@ -227,10 +227,13 @@ public abstract class AbstractLuceneIndex implements Index { writerThread.shutdown(); try { if (!writerThread.awaitTermination(5, TimeUnit.SECONDS)) { - log.warn("shutting down " + name + " index with pending Lucene writes"); + logger.atWarning().log("shutting down %s index with pending Lucene writes", name); } } catch (InterruptedException e) { - log.warn("interrupted waiting for pending Lucene writes of " + name + " index", e); + logger + .atWarning() + .withCause(e) + .log("interrupted waiting for pending Lucene writes of %s index", name); } reopenThread.close(); @@ -244,7 +247,7 @@ public abstract class AbstractLuceneIndex implements Index { try { searcherManager.maybeRefreshBlocking(); } catch (IOException e) { - log.warn("error finishing pending Lucene writes", e); + logger.atWarning().withCause(e).log("error finishing pending Lucene writes"); } try { @@ -252,12 +255,12 @@ public abstract class AbstractLuceneIndex implements Index { } catch (AlreadyClosedException e) { // Ignore. } catch (IOException e) { - log.warn("error closing Lucene writer", e); + logger.atWarning().withCause(e).log("error closing Lucene writer"); } try { dir.close(); } catch (IOException e) { - log.warn("error closing Lucene directory", e); + logger.atWarning().withCause(e).log("error closing Lucene directory"); } } @@ -453,7 +456,7 @@ public abstract class AbstractLuceneIndex implements Index { try { return reopenThread.waitForGeneration(gen, 0); } catch (InterruptedException e) { - log.warn("Interrupted waiting for searcher generation", e); + logger.atWarning().withCause(e).log("Interrupted waiting for searcher generation"); return false; } } @@ -529,7 +532,7 @@ public abstract class AbstractLuceneIndex implements Index { try { release(searcher); } catch (IOException e) { - log.warn("cannot release Lucene searcher", e); + logger.atWarning().withCause(e).log("cannot release Lucene searcher"); } } } diff --git a/java/com/google/gerrit/lucene/BUILD b/java/com/google/gerrit/lucene/BUILD index 0c5321531b..6cb7751268 100644 --- a/java/com/google/gerrit/lucene/BUILD +++ b/java/com/google/gerrit/lucene/BUILD @@ -35,10 +35,10 @@ java_library( "//java/com/google/gerrit/server", "//lib:guava", "//lib:gwtorm", + "//lib/flogger:api", "//lib/guice", "//lib/guice:guice-assistedinject", "//lib/jgit/org.eclipse.jgit:jgit", - "//lib/log:api", "//lib/lucene:lucene-analyzers-common", "//lib/lucene:lucene-core-and-backward-codecs", "//lib/lucene:lucene-misc", diff --git a/java/com/google/gerrit/lucene/LuceneChangeIndex.java b/java/com/google/gerrit/lucene/LuceneChangeIndex.java index c8f8fff0ba..7dfaac193a 100644 --- a/java/com/google/gerrit/lucene/LuceneChangeIndex.java +++ b/java/com/google/gerrit/lucene/LuceneChangeIndex.java @@ -34,6 +34,7 @@ import com.google.common.collect.Iterables; import com.google.common.collect.ListMultimap; import com.google.common.collect.MultimapBuilder; import com.google.common.collect.Sets; +import com.google.common.flogger.FluentLogger; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListeningExecutorService; import com.google.gerrit.index.QueryOptions; @@ -91,8 +92,6 @@ import org.apache.lucene.search.TopFieldDocs; import org.apache.lucene.store.RAMDirectory; import org.apache.lucene.util.BytesRef; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Secondary index implementation using Apache Lucene. @@ -102,7 +101,7 @@ import org.slf4j.LoggerFactory; * a committed write and it showing up to other threads' searchers. */ public class LuceneChangeIndex implements ChangeIndex { - private static final Logger log = LoggerFactory.getLogger(LuceneChangeIndex.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); static final String UPDATED_SORT_FIELD = sortFieldName(ChangeField.UPDATED); static final String ID_SORT_FIELD = sortFieldName(ChangeField.LEGACY_ID); @@ -380,7 +379,7 @@ public class LuceneChangeIndex implements ChangeIndex { try { indexes.get(i).release(searchers[i]); } catch (IOException e) { - log.warn("cannot release Lucene searcher", e); + logger.atWarning().withCause(e).log("cannot release Lucene searcher"); } } } diff --git a/java/com/google/gerrit/lucene/LuceneVersionManager.java b/java/com/google/gerrit/lucene/LuceneVersionManager.java index aabce35e45..63abea84da 100644 --- a/java/com/google/gerrit/lucene/LuceneVersionManager.java +++ b/java/com/google/gerrit/lucene/LuceneVersionManager.java @@ -14,6 +14,7 @@ package com.google.gerrit.lucene; +import com.google.common.flogger.FluentLogger; import com.google.common.primitives.Ints; import com.google.gerrit.extensions.registration.DynamicSet; import com.google.gerrit.index.Index; @@ -33,12 +34,10 @@ import java.nio.file.Path; import java.util.Collection; import java.util.TreeMap; import org.eclipse.jgit.lib.Config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class LuceneVersionManager extends VersionManager { - private static final Logger log = LoggerFactory.getLogger(LuceneVersionManager.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); static Path getDir(SitePaths sitePaths, String name, Schema schema) { return sitePaths.index_dir.resolve(String.format("%s_%04d", name, schema.getVersion())); @@ -62,7 +61,7 @@ public class LuceneVersionManager extends VersionManager { Path p = getDir(sitePaths, def.getName(), schema); boolean isDir = Files.isDirectory(p); if (Files.exists(p) && !isDir) { - log.warn("Not a directory: {}", p.toAbsolutePath()); + logger.atWarning().log("Not a directory: %s", p.toAbsolutePath()); } int v = schema.getVersion(); versions.put(v, new Version<>(schema, v, isDir, cfg.getReady(def.getName(), v))); @@ -78,7 +77,7 @@ public class LuceneVersionManager extends VersionManager { String versionStr = n.substring(prefix.length()); Integer v = Ints.tryParse(versionStr); if (v == null || versionStr.length() != 4) { - log.warn("Unrecognized version in index directory: {}", p.toAbsolutePath()); + logger.atWarning().log("Unrecognized version in index directory: %s", p.toAbsolutePath()); continue; } if (!versions.containsKey(v)) { @@ -86,7 +85,7 @@ public class LuceneVersionManager extends VersionManager { } } } catch (IOException e) { - log.error("Error scanning index directory: " + sitePaths.index_dir, e); + logger.atSevere().withCause(e).log("Error scanning index directory: %s", sitePaths.index_dir); } return versions; } diff --git a/java/com/google/gerrit/metrics/BUILD b/java/com/google/gerrit/metrics/BUILD index b32b087347..dda2c39207 100644 --- a/java/com/google/gerrit/metrics/BUILD +++ b/java/com/google/gerrit/metrics/BUILD @@ -8,8 +8,8 @@ java_library( "//java/com/google/gerrit/lifecycle", "//java/org/eclipse/jgit:server", "//lib:guava", + "//lib/flogger:api", "//lib/guice", "//lib/jgit/org.eclipse.jgit:jgit", - "//lib/log:api", ], ) diff --git a/java/com/google/gerrit/metrics/proc/OperatingSystemMXBeanProvider.java b/java/com/google/gerrit/metrics/proc/OperatingSystemMXBeanProvider.java index bc2846a200..10d589a84e 100644 --- a/java/com/google/gerrit/metrics/proc/OperatingSystemMXBeanProvider.java +++ b/java/com/google/gerrit/metrics/proc/OperatingSystemMXBeanProvider.java @@ -14,15 +14,14 @@ package com.google.gerrit.metrics.proc; +import com.google.common.flogger.FluentLogger; import java.lang.management.ManagementFactory; import java.lang.management.OperatingSystemMXBean; import java.lang.reflect.Method; import java.util.Arrays; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; class OperatingSystemMXBeanProvider { - private static final Logger log = LoggerFactory.getLogger(OperatingSystemMXBeanProvider.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final OperatingSystemMXBean sys; private final Method getProcessCpuTime; @@ -41,10 +40,10 @@ class OperatingSystemMXBeanProvider { return new OperatingSystemMXBeanProvider(sys); } } catch (ReflectiveOperationException e) { - log.debug("No implementation for {}", name, e); + logger.atFine().withCause(e).log("No implementation for %s", name); } } - log.warn("No implementation of UnixOperatingSystemMXBean found"); + logger.atWarning().log("No implementation of UnixOperatingSystemMXBean found"); return null; } } diff --git a/java/com/google/gerrit/testing/BUILD b/java/com/google/gerrit/testing/BUILD index 875d636921..43aa978786 100644 --- a/java/com/google/gerrit/testing/BUILD +++ b/java/com/google/gerrit/testing/BUILD @@ -35,11 +35,11 @@ java_library( "//lib:junit", "//lib/auto:auto-value", "//lib/auto:auto-value-annotations", + "//lib/flogger:api", "//lib/guice", "//lib/guice:guice-servlet", "//lib/jgit/org.eclipse.jgit:jgit", "//lib/jgit/org.eclipse.jgit.junit:junit", - "//lib/log:api", "//lib/truth", ], ) diff --git a/java/com/google/gerrit/testing/FakeEmailSender.java b/java/com/google/gerrit/testing/FakeEmailSender.java index 19e85db9a1..28946dc5f1 100644 --- a/java/com/google/gerrit/testing/FakeEmailSender.java +++ b/java/com/google/gerrit/testing/FakeEmailSender.java @@ -19,6 +19,7 @@ import static java.util.stream.Collectors.toList; import com.google.auto.value.AutoValue; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.Nullable; import com.google.gerrit.common.errors.EmailException; import com.google.gerrit.server.git.WorkQueue; @@ -35,8 +36,6 @@ import java.util.Collections; import java.util.List; import java.util.Map; import java.util.concurrent.ExecutionException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Email sender implementation that records messages in memory. @@ -48,7 +47,7 @@ import org.slf4j.LoggerFactory; */ @Singleton public class FakeEmailSender implements EmailSender { - private static final Logger log = LoggerFactory.getLogger(FakeEmailSender.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public static class Module extends AbstractModule { @Override @@ -166,7 +165,7 @@ public class FakeEmailSender implements EmailSender { try { task.get(); } catch (ExecutionException | InterruptedException e) { - log.warn("error finishing email task", e); + logger.atWarning().withCause(e).log("error finishing email task"); } } } diff --git a/java/com/google/gerrit/testing/NoteDbChecker.java b/java/com/google/gerrit/testing/NoteDbChecker.java index b5dd9e9b2e..1dc8ee2131 100644 --- a/java/com/google/gerrit/testing/NoteDbChecker.java +++ b/java/com/google/gerrit/testing/NoteDbChecker.java @@ -21,6 +21,7 @@ import static java.util.stream.Collectors.toList; import com.google.common.base.Joiner; import com.google.common.collect.ImmutableListMultimap; import com.google.common.collect.ListMultimap; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.reviewdb.client.RefNames; @@ -46,12 +47,10 @@ import java.util.stream.Stream; import org.eclipse.jgit.errors.RepositoryNotFoundException; import org.eclipse.jgit.lib.Repository; import org.junit.runner.Description; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton public class NoteDbChecker { - static final Logger log = LoggerFactory.getLogger(NoteDbChecker.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final Provider dbProvider; private final GitRepositoryManager repoManager; @@ -193,7 +192,7 @@ public class NoteDbChecker { } catch (Throwable t) { String msg = "Error converting change: " + c; msgs.add(msg); - log.error(msg, t); + logger.atSevere().withCause(t).log(msg); continue; } List diff = expected.differencesFrom(actual); diff --git a/java/gerrit/BUILD b/java/gerrit/BUILD index 980ad23fde..4644af87e2 100644 --- a/java/gerrit/BUILD +++ b/java/gerrit/BUILD @@ -8,8 +8,8 @@ java_library( "//java/com/google/gerrit/reviewdb:server", "//java/com/google/gerrit/server", "//lib:gwtorm", + "//lib/flogger:api", "//lib/jgit/org.eclipse.jgit:jgit", - "//lib/log:api", "//lib/prolog:runtime", ], ) diff --git a/java/gerrit/PRED_uploader_1.java b/java/gerrit/PRED_uploader_1.java index bf1bf27a29..a0e4aafe5a 100644 --- a/java/gerrit/PRED_uploader_1.java +++ b/java/gerrit/PRED_uploader_1.java @@ -14,6 +14,7 @@ package gerrit; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.reviewdb.client.PatchSet; import com.google.gerrit.server.rules.StoredValues; @@ -25,11 +26,9 @@ import com.googlecode.prolog_cafe.lang.Prolog; import com.googlecode.prolog_cafe.lang.StructureTerm; import com.googlecode.prolog_cafe.lang.SymbolTerm; import com.googlecode.prolog_cafe.lang.Term; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class PRED_uploader_1 extends Predicate.P1 { - private static final Logger log = LoggerFactory.getLogger(PRED_uploader_1.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final SymbolTerm user = SymbolTerm.intern("user", 1); @@ -45,9 +44,11 @@ public class PRED_uploader_1 extends Predicate.P1 { PatchSet patchSet = StoredValues.getPatchSet(engine); if (patchSet == null) { - log.error( - "Failed to load current patch set of change " - + StoredValues.getChange(engine).getChangeId()); + logger + .atSevere() + .log( + "Failed to load current patch set of change %s", + StoredValues.getChange(engine).getChangeId()); return engine.fail(); } diff --git a/java/org/apache/commons/net/BUILD b/java/org/apache/commons/net/BUILD index 0074a0347e..49519334df 100644 --- a/java/org/apache/commons/net/BUILD +++ b/java/org/apache/commons/net/BUILD @@ -6,6 +6,5 @@ java_library( "//java/com/google/gerrit/util/ssl", "//lib/commons:codec", "//lib/commons:net", - "//lib/log:api", ], ) diff --git a/javatests/com/google/gerrit/acceptance/ssh/SshCommandsIT.java b/javatests/com/google/gerrit/acceptance/ssh/SshCommandsIT.java index 9a5a899610..5694bd0391 100644 --- a/javatests/com/google/gerrit/acceptance/ssh/SshCommandsIT.java +++ b/javatests/com/google/gerrit/acceptance/ssh/SshCommandsIT.java @@ -20,6 +20,7 @@ import static com.google.gerrit.server.group.SystemGroupBackend.REGISTERED_USERS import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import com.google.common.flogger.FluentLogger; import com.google.gerrit.acceptance.AbstractDaemonTest; import com.google.gerrit.acceptance.NoHttpd; import com.google.gerrit.acceptance.Sandboxed; @@ -31,13 +32,11 @@ import java.util.Collections; import java.util.List; import java.util.Map; import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @NoHttpd @UseSsh public class SshCommandsIT extends AbstractDaemonTest { - private static final Logger log = LoggerFactory.getLogger(SshCommandsIT.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); // TODO: It would be better to dynamically generate these lists private static final List COMMON_ROOT_COMMANDS = @@ -129,7 +128,7 @@ public class SshCommandsIT extends AbstractDaemonTest { // content of the stderr, which will always start with "gerrit command" when the --help // option is used. String cmd = String.format("gerrit%s%s %s", root.isEmpty() ? "" : " ", root, command); - log.debug(cmd); + logger.atFine().log(cmd); adminSshSession.exec(String.format("%s --help", cmd)); String response = adminSshSession.getError(); assertWithMessage(String.format("command %s failed: %s", command, response)) diff --git a/javatests/com/google/gerrit/gpg/BUILD b/javatests/com/google/gerrit/gpg/BUILD index ab66f9a24d..baf65b75c4 100644 --- a/javatests/com/google/gerrit/gpg/BUILD +++ b/javatests/com/google/gerrit/gpg/BUILD @@ -24,11 +24,11 @@ junit_tests( "//lib/bouncycastle:bcpg-neverlink", "//lib/bouncycastle:bcprov", "//lib/bouncycastle:bcprov-neverlink", + "//lib/flogger:api", "//lib/guice", "//lib/guice:guice-assistedinject", "//lib/jgit/org.eclipse.jgit:jgit", "//lib/jgit/org.eclipse.jgit.junit:junit", - "//lib/log:api", "//lib/truth", ], ) diff --git a/lib/log/BUILD b/lib/log/BUILD index 8ca87e7538..949260db37 100644 --- a/lib/log/BUILD +++ b/lib/log/BUILD @@ -1,18 +1,13 @@ java_library( name = "api", data = ["//lib:LICENSE-slf4j"], - visibility = ["//visibility:public"], + visibility = [ + "//lib/jgit/org.eclipse.jgit:__pkg__", + "//plugins:__pkg__", + ], exports = ["@log_api//jar"], ) -java_library( - name = "nop", - data = ["//lib:LICENSE-slf4j"], - visibility = ["//visibility:public"], - exports = ["@log_nop//jar"], - runtime_deps = [":api"], -) - java_library( name = "ext", data = ["//lib:LICENSE-slf4j"], From 8860e8e0ad6217a185d1db9728853b0627f56e45 Mon Sep 17 00:00:00 2001 From: Edwin Kempin Date: Tue, 8 May 2018 11:19:37 +0200 Subject: [PATCH 8/9] Export Flogger api for plugins Still export the slf4j api so that plugins are not forced to migrate immediately. Change-Id: I873bbb18909e16177cd4329be36cdf4226990977 Signed-off-by: Edwin Kempin --- Documentation/dev-plugins.txt | 4 ++-- plugins/BUILD | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Documentation/dev-plugins.txt b/Documentation/dev-plugins.txt index e6a6227304..a59c08dabe 100644 --- a/Documentation/dev-plugins.txt +++ b/Documentation/dev-plugins.txt @@ -765,7 +765,7 @@ ssh command. [source, java] ---- public class SshModule extends AbstractModule { - private static final Logger log = LoggerFactory.getLogger(SshModule.class); + private static final FluentLogger logger = FluentLogger.forEnclosingClass(); @Override protected void configure() { @@ -778,7 +778,7 @@ public class SshModule extends AbstractModule { public static class BanOptions implements DynamicOptions.DynamicBean { @Option(name = "--log", aliases = { "-l" }, usage = "Say Hello in the Log") private void parse(String arg) { - log.error("Say Hello in the Log " + arg); + logger.atSevere().log("Say Hello in the Log %s", arg); } } ---- diff --git a/plugins/BUILD b/plugins/BUILD index 471ab3d933..7252f8c138 100644 --- a/plugins/BUILD +++ b/plugins/BUILD @@ -41,6 +41,7 @@ EXPORTS = [ "//lib/commons:lang", "//lib/commons:lang3", "//lib/dropwizard:dropwizard-core", + "//lib/flogger:api", "//lib/guice:guice", "//lib/guice:guice-assistedinject", "//lib/guice:guice-servlet", From 138573a8998f60c4b0bdb1e87e5ab55820d97aca Mon Sep 17 00:00:00 2001 From: Edwin Kempin Date: Wed, 16 May 2018 14:19:49 +0200 Subject: [PATCH 9/9] Compute some logging args lazily This way no work is done at the log site to compute the logging args (it only creates the instances for the lambda expressions). Flogger will only evaluate the lambdas if it intends to actually log the message which makes the logging statement virtually free if it is disabled. There are likely more places where we can benefit from lazy logging arguments. We should convert them whenever we find them. Change-Id: Ic422a413fd76fcceb8102a7d1959e6c116e1f05f Signed-off-by: Edwin Kempin --- .../gerrit/common/SiteLibraryLoaderUtil.java | 3 +- .../google/gerrit/gpg/PublicKeyChecker.java | 4 +- .../server/restapi/change/ReviewersUtil.java | 87 ++++++++++++------- 3 files changed, 61 insertions(+), 33 deletions(-) diff --git a/java/com/google/gerrit/common/SiteLibraryLoaderUtil.java b/java/com/google/gerrit/common/SiteLibraryLoaderUtil.java index 04bb80fb2b..cf86f74094 100644 --- a/java/com/google/gerrit/common/SiteLibraryLoaderUtil.java +++ b/java/com/google/gerrit/common/SiteLibraryLoaderUtil.java @@ -14,6 +14,7 @@ package com.google.gerrit.common; +import static com.google.common.flogger.LazyArgs.lazy; import static com.google.gerrit.common.FileUtil.lastModified; import static java.util.stream.Collectors.joining; @@ -37,7 +38,7 @@ public final class SiteLibraryLoaderUtil { try { List jars = listJars(libdir); IoUtil.loadJARs(jars); - logger.atFine().log("Loaded site libraries: %s", jarList(jars)); + logger.atFine().log("Loaded site libraries: %s", lazy(() -> jarList(jars))); } catch (IOException e) { logger.atSevere().withCause(e).log("Error scanning lib directory %s", libdir); } diff --git a/java/com/google/gerrit/gpg/PublicKeyChecker.java b/java/com/google/gerrit/gpg/PublicKeyChecker.java index bd6e0d787b..fd57f4e4f8 100644 --- a/java/com/google/gerrit/gpg/PublicKeyChecker.java +++ b/java/com/google/gerrit/gpg/PublicKeyChecker.java @@ -14,6 +14,7 @@ package com.google.gerrit.gpg; +import static com.google.common.flogger.LazyArgs.lazy; import static com.google.gerrit.extensions.common.GpgKeyInfo.Status.BAD; import static com.google.gerrit.extensions.common.GpgKeyInfo.Status.OK; import static com.google.gerrit.extensions.common.GpgKeyInfo.Status.TRUSTED; @@ -297,7 +298,8 @@ public class PublicKeyChecker { .atInfo() .log( "Key %s is revoked by %s, which is not in the store. Assuming revocation is valid.", - Fingerprint.toString(key.getFingerprint()), Fingerprint.toString(rfp)); + lazy(() -> Fingerprint.toString(key.getFingerprint())), + lazy(() -> Fingerprint.toString(rfp))); problems.add(reasonToString(getRevocationReason(revocation))); continue; } diff --git a/java/com/google/gerrit/server/restapi/change/ReviewersUtil.java b/java/com/google/gerrit/server/restapi/change/ReviewersUtil.java index cd00043dcf..c0db3c3789 100644 --- a/java/com/google/gerrit/server/restapi/change/ReviewersUtil.java +++ b/java/com/google/gerrit/server/restapi/change/ReviewersUtil.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.restapi.change; +import static com.google.common.flogger.LazyArgs.lazy; import static java.util.stream.Collectors.toList; import com.google.common.base.Strings; @@ -217,39 +218,16 @@ public class ReviewersUtil { } logger.atFine().log("Filtered recommendations: %s", filteredRecommendations); - List suggestedReviewers = loadAccounts(filteredRecommendations); - if (!excludeGroups && suggestedReviewers.size() < limit && !Strings.isNullOrEmpty(query)) { - // Add groups at the end as individual accounts are usually more - // important. - suggestedReviewers.addAll( - suggestAccountGroups( - suggestReviewers, - projectState, - visibilityControl, - limit - suggestedReviewers.size())); - } - - if (suggestedReviewers.size() > limit) { - suggestedReviewers = suggestedReviewers.subList(0, limit); - logger.atFine().log("Limited suggested reviewers to %d accounts.", limit); - } + List suggestedReviewers = + suggestReviewers( + suggestReviewers, + projectState, + visibilityControl, + excludeGroups, + filteredRecommendations); logger .atFine() - .log( - "Suggested reviewers: %s", - suggestedReviewers - .stream() - .map( - r -> { - if (r.account != null) { - return "a/" + r.account._accountId; - } else if (r.group != null) { - return "g/" + r.group.id; - } else { - return ""; - } - }) - .collect(toList())); + .log("Suggested reviewers: %s", lazy(() -> formatSuggestedReviewers(suggestedReviewers))); return suggestedReviewers; } @@ -283,6 +261,36 @@ public class ReviewersUtil { } } + private List suggestReviewers( + SuggestReviewers suggestReviewers, + ProjectState projectState, + VisibilityControl visibilityControl, + boolean excludeGroups, + List filteredRecommendations) + throws OrmException, PermissionBackendException, IOException { + List suggestedReviewers = loadAccounts(filteredRecommendations); + + int limit = suggestReviewers.getLimit(); + if (!excludeGroups + && suggestedReviewers.size() < limit + && !Strings.isNullOrEmpty(suggestReviewers.getQuery())) { + // Add groups at the end as individual accounts are usually more + // important. + suggestedReviewers.addAll( + suggestAccountGroups( + suggestReviewers, + projectState, + visibilityControl, + limit - suggestedReviewers.size())); + } + + if (suggestedReviewers.size() > limit) { + suggestedReviewers = suggestedReviewers.subList(0, limit); + logger.atFine().log("Limited suggested reviewers to %d accounts.", limit); + } + return suggestedReviewers; + } + private List recommendAccounts( @Nullable ChangeNotes changeNotes, SuggestReviewers suggestReviewers, @@ -414,4 +422,21 @@ public class ReviewersUtil { return result; } + + private static String formatSuggestedReviewers(List suggestedReviewers) { + return suggestedReviewers + .stream() + .map( + r -> { + if (r.account != null) { + return "a/" + r.account._accountId; + } else if (r.group != null) { + return "g/" + r.group.id; + } else { + return ""; + } + }) + .collect(toList()) + .toString(); + } }