diff --git a/src/main/java/com/googlesource/gerrit/plugins/hooks/CommitReceived.java b/src/main/java/com/googlesource/gerrit/plugins/hooks/CommitReceived.java
index b03a77b..74a0817 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/hooks/CommitReceived.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/hooks/CommitReceived.java
@@ -51,7 +51,7 @@
     args.add("--project", projectName);
     args.add("--refname", refname);
     args.add("--uploader", receiveEvent.user.getNameEmail());
-    args.add("--uploader-username", receiveEvent.user.getUserName());
+    args.add("--uploader-username", receiveEvent.user.getUserName().orElse(null));
     args.add("--oldrev", old.name());
     args.add("--newrev", receiveEvent.commit.name());
     args.add("--cmdref", commandRef);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/hooks/HookExecutor.java b/src/main/java/com/googlesource/gerrit/plugins/hooks/HookExecutor.java
index 42d4e75..c54009a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/hooks/HookExecutor.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/hooks/HookExecutor.java
@@ -1,8 +1,10 @@
 package com.googlesource.gerrit.plugins.hooks;
 
+import com.google.common.flogger.FluentLogger;
 import com.google.common.util.concurrent.ThreadFactoryBuilder;
 import com.google.gerrit.extensions.events.LifecycleListener;
 import com.google.gerrit.server.config.GerritServerConfig;
+import com.google.gerrit.server.logging.LoggingContextAwareExecutorService;
 import com.google.inject.Inject;
 import java.lang.Thread.UncaughtExceptionHandler;
 import java.nio.file.Files;
@@ -13,16 +15,15 @@
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 import org.eclipse.jgit.lib.Config;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public class HookExecutor implements LifecycleListener {
-  private static final Logger log = LoggerFactory.getLogger(HookExecutor.class);
+  private static final FluentLogger logger = FluentLogger.forEnclosingClass();
+
   private static final UncaughtExceptionHandler LOG_UNCAUGHT_EXCEPTION =
       new UncaughtExceptionHandler() {
         @Override
         public void uncaughtException(Thread t, Throwable e) {
-          log.error("HookExecutor thread {} threw exception", t.getName(), e);
+          logger.atSevere().withCause(e).log("HookExecutor thread %s threw exception", t.getName());
         }
       };
 
@@ -33,11 +34,12 @@
   HookExecutor(@GerritServerConfig Config config) {
     this.timeout = config.getInt("hooks", "syncHookTimeout", 30);
     this.threadPool =
-        Executors.newCachedThreadPool(
-            new ThreadFactoryBuilder()
-                .setNameFormat("SyncHook-%d")
-                .setUncaughtExceptionHandler(LOG_UNCAUGHT_EXCEPTION)
-                .build());
+        new LoggingContextAwareExecutorService(
+            Executors.newCachedThreadPool(
+                new ThreadFactoryBuilder()
+                    .setNameFormat("SyncHook-%d")
+                    .setUncaughtExceptionHandler(LOG_UNCAUGHT_EXCEPTION)
+                    .build()));
   }
 
   HookResult submit(Path hook, HookArgs args) {
@@ -46,7 +48,7 @@
 
   HookResult submit(String projectName, Path hook, HookArgs args) {
     if (!Files.exists(hook)) {
-      log.debug("Hook file not found: {}", hook);
+      logger.atFine().log("Hook file not found: %s", hook);
       return null;
     }
     HookTask.Sync hookTask = new HookTask.Sync(projectName, hook, args);
@@ -58,10 +60,10 @@
       return task.get(timeout, TimeUnit.SECONDS);
     } catch (TimeoutException e) {
       message = "Synchronous hook timed out " + hook;
-      log.error(message);
+      logger.atSevere().log(message);
     } catch (Exception e) {
       message = "Error running hook " + hook;
-      log.error(message, e);
+      logger.atSevere().withCause(e).log(message);
     }
     task.cancel(true);
     hookTask.cancel();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/hooks/HookFactory.java b/src/main/java/com/googlesource/gerrit/plugins/hooks/HookFactory.java
index f3d8293..afd189d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/hooks/HookFactory.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/hooks/HookFactory.java
@@ -16,6 +16,7 @@
 
 import static com.google.common.base.MoreObjects.firstNonNull;
 
+import com.google.common.flogger.FluentLogger;
 import com.google.gerrit.server.config.GerritServerConfig;
 import com.google.gerrit.server.config.SitePaths;
 import com.google.inject.Inject;
@@ -23,12 +24,10 @@
 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 HookFactory {
-  private static final Logger log = LoggerFactory.getLogger(HookFactory.class);
+  private static final FluentLogger logger = FluentLogger.forEnclosingClass();
 
   private final HookQueue queue;
   private final HookExecutor syncHookExecutor;
@@ -54,13 +53,13 @@
     } else {
       this.hooksPath = sitePaths.hooks_dir;
     }
-    log.info("hooks.path: {}", this.hooksPath);
+    logger.atInfo().log("hooks.path: %s", this.hooksPath);
   }
 
   private Path getHookPath(String configName, String defaultName) {
     String v = config.getString("hooks", null, configName);
     Path hookPath = hooksPath.resolve(firstNonNull(v, defaultName));
-    log.info("hooks.{} resolved to {}", configName, hookPath);
+    logger.atInfo().log("hooks.%s resolved to %s", configName, hookPath);
     return hookPath;
   }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/hooks/HookQueue.java b/src/main/java/com/googlesource/gerrit/plugins/hooks/HookQueue.java
index 1b2a307..88ae311 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/hooks/HookQueue.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/hooks/HookQueue.java
@@ -14,17 +14,16 @@
 
 package com.googlesource.gerrit.plugins.hooks;
 
+import com.google.common.flogger.FluentLogger;
 import com.google.gerrit.extensions.events.LifecycleListener;
 import com.google.gerrit.server.git.WorkQueue;
 import com.google.inject.Inject;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.concurrent.ScheduledExecutorService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 class HookQueue implements LifecycleListener {
-  private static final Logger log = LoggerFactory.getLogger(HookQueue.class);
+  private static final FluentLogger logger = FluentLogger.forEnclosingClass();
 
   private final WorkQueue workQueue;
 
@@ -41,7 +40,7 @@
 
   void submit(String projectName, Path hook, HookArgs args) {
     if (!Files.exists(hook)) {
-      log.debug("Hook file not found: {}", hook.toAbsolutePath());
+      logger.atFine().log("Hook file not found: %s", hook.toAbsolutePath());
       return;
     }
     queue.submit(new HookTask.Async(projectName, hook, args));
diff --git a/src/main/java/com/googlesource/gerrit/plugins/hooks/HookTask.java b/src/main/java/com/googlesource/gerrit/plugins/hooks/HookTask.java
index b6654da..8b06a24 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/hooks/HookTask.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/hooks/HookTask.java
@@ -16,6 +16,7 @@
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 
+import com.google.common.flogger.FluentLogger;
 import com.google.common.io.ByteStreams;
 import com.google.gerrit.metrics.Timer1;
 import com.google.gerrit.reviewdb.client.Project;
@@ -29,11 +30,9 @@
 import java.util.Map;
 import java.util.concurrent.Callable;
 import org.eclipse.jgit.lib.Repository;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 class HookTask {
-  private static final Logger log = LoggerFactory.getLogger(HookTask.class);
+  private static final FluentLogger logger = FluentLogger.forEnclosingClass();
 
   private final Path sitePath;
   private final String projectName;
@@ -113,25 +112,25 @@
     } catch (InterruptedException iex) {
       // InterruptedException - timeout or cancel
       args.metrics.timeout(name);
-      log.error("hook[{}] timed out: {}", name, iex.getMessage());
+      logger.atSevere().log("hook[%s] timed out: %s", name, iex.getMessage());
     } catch (Throwable err) {
       args.metrics.error(name);
-      log.error("Error running hook {}", hook.toAbsolutePath(), err);
+      logger.atSevere().withCause(err).log("Error running hook %s", hook.toAbsolutePath());
     }
 
     if (result != null) {
       int exitValue = result.getExitValue();
       if (exitValue != 0) {
-        log.error("hook[{}] exited with error status: {}", name, exitValue);
+        logger.atSevere().log("hook[%s] exited with error status: %d", name, exitValue);
       }
 
-      if (log.isDebugEnabled()) {
+      if (logger.atFine().isEnabled()) {
         try (BufferedReader br = new BufferedReader(new StringReader(result.getOutput()))) {
           br.lines()
               .filter(s -> !s.isEmpty())
-              .forEach(line -> log.debug("hook[{}] output: {}", name, line));
+              .forEach(line -> logger.atFine().log("hook[%s] output: %s", name, line));
         } catch (IOException iox) {
-          log.error("Error writing hook [{}] output", name, iox);
+          logger.atSevere().withCause(iox).log("Error writing hook [%s] output", name);
         }
       }
     }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/hooks/RefUpdate.java b/src/main/java/com/googlesource/gerrit/plugins/hooks/RefUpdate.java
index 7eedfa5..90a1b93 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/hooks/RefUpdate.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/hooks/RefUpdate.java
@@ -49,7 +49,7 @@
     HookArgs args = hookFactory.createArgs();
     args.add("--project", projectName);
     args.add("--uploader", refEvent.user.getNameEmail());
-    args.add("--uploader-username", refEvent.user.getUserName());
+    args.add("--uploader-username", refEvent.user.getUserName().orElse(null));
     args.add("--oldrev", getObjectId(refEvent.command.getOldId()).getName());
     args.add("--newrev", getObjectId(refEvent.command.getNewId()).getName());
     args.add("--refname", refEvent.command.getRefName());
diff --git a/src/main/java/com/googlesource/gerrit/plugins/hooks/Submit.java b/src/main/java/com/googlesource/gerrit/plugins/hooks/Submit.java
index 8e2f1e0..7474553 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/hooks/Submit.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/hooks/Submit.java
@@ -51,7 +51,7 @@
     args.add("--project", projectName);
     args.add("--branch", destBranch.get());
     args.add("--submitter", caller.getNameEmail());
-    args.add("--submitter-username", caller.getUserName());
+    args.add("--submitter-username", caller.getUserName().get());
     args.add("--patchset", patchSetId.get());
     args.add("--commit", commit.getId().name());
 
