diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Manager.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Manager.java
index ae26bc0..55b0929 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Manager.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Manager.java
@@ -14,6 +14,7 @@
 
 package com.googlesource.gerrit.plugins.rabbitmq;
 
+import com.google.common.flogger.FluentLogger;
 import com.google.gerrit.extensions.annotations.PluginData;
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.events.LifecycleListener;
@@ -34,13 +35,11 @@
 import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.List;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 @Singleton
 public class Manager implements LifecycleListener {
 
-  private static final Logger LOGGER = LoggerFactory.getLogger(Manager.class);
+  private static final FluentLogger logger = FluentLogger.forEnclosingClass();
 
   public static final String FILE_EXT = ".config";
   public static final String SITE_DIR = "site";
@@ -114,11 +113,11 @@
           propList.add(site);
         }
       }
-    } catch (IOException iex) {
-      LOGGER.warn(iex.getMessage());
+    } catch (IOException ioe) {
+      logger.atWarning().log(ioe.getMessage());
     }
     if (propList.isEmpty()) {
-      LOGGER.warn("No site configs found. Using base config only!");
+      logger.atWarning().log("No site configs found. Using base config only!");
       propList.add(base);
     }
     return propList;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/config/AMQProperties.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/config/AMQProperties.java
index a721bff..4ecf35e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/config/AMQProperties.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/config/AMQProperties.java
@@ -14,6 +14,7 @@
 
 package com.googlesource.gerrit.plugins.rabbitmq.config;
 
+import com.google.common.flogger.FluentLogger;
 import com.google.gerrit.server.util.time.TimeUtil;
 import com.googlesource.gerrit.plugins.rabbitmq.annotation.MessageHeader;
 import com.googlesource.gerrit.plugins.rabbitmq.config.section.Message;
@@ -24,15 +25,13 @@
 import java.util.HashMap;
 import java.util.Map;
 import org.apache.commons.codec.CharEncoding;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public class AMQProperties {
 
   public static final String EVENT_APPID = "gerrit";
   public static final String CONTENT_TYPE_JSON = "application/json";
 
-  private static final Logger LOGGER = LoggerFactory.getLogger(AMQProperties.class);
+  private static final FluentLogger logger = FluentLogger.forEnclosingClass();
 
   private final Message message;
   private final Map<String, Object> headers;
@@ -66,7 +65,8 @@
                 break;
             }
           } catch (IllegalAccessException | IllegalArgumentException ex) {
-            LOGGER.warn("Cannot access field {}. Cause: {}", f.getName(), ex.getMessage());
+            logger.atWarning().log(
+                "Cannot access field %s. Cause: %s", f.getName(), ex.getMessage());
           }
         }
       }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/config/PluginProperties.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/config/PluginProperties.java
index 7577815..dcfe32f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/config/PluginProperties.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/config/PluginProperties.java
@@ -14,6 +14,7 @@
 
 package com.googlesource.gerrit.plugins.rabbitmq.config;
 
+import com.google.common.flogger.FluentLogger;
 import com.google.inject.assistedinject.Assisted;
 import com.google.inject.assistedinject.AssistedInject;
 import com.googlesource.gerrit.plugins.rabbitmq.config.section.Gerrit;
@@ -30,12 +31,10 @@
 import org.eclipse.jgit.lib.Config;
 import org.eclipse.jgit.storage.file.FileBasedConfig;
 import org.eclipse.jgit.util.FS;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public class PluginProperties implements Properties {
 
-  private static final Logger LOGGER = LoggerFactory.getLogger(PluginProperties.class);
+  private static final FluentLogger logger = FluentLogger.forEnclosingClass();
 
   private static final int MINIMUM_CONNECTION_MONITOR_INTERVAL = 5000;
 
@@ -77,9 +76,9 @@
   @Override
   public boolean load(Properties baseProperties) {
     initialize();
-    LOGGER.info("Loading {} ...", propertiesFile);
+    logger.atInfo().log("Loading %s", propertiesFile);
     if (!Files.exists(propertiesFile)) {
-      LOGGER.warn("No {}", propertiesFile);
+      logger.atWarning().log("No %s", propertiesFile);
       return false;
     }
 
@@ -87,10 +86,10 @@
     try {
       cfg.load();
     } catch (ConfigInvalidException e) {
-      LOGGER.info("{} has invalid format: {}", propertiesFile, e.getMessage());
+      logger.atInfo().log("%s has invalid format: %s", propertiesFile, e.getMessage());
       return false;
     } catch (IOException e) {
-      LOGGER.info("Cannot read {}: {}", propertiesFile, e.getMessage());
+      logger.atInfo().log("Cannot read %s: %s", propertiesFile, e.getMessage());
       return false;
     }
     for (Section section : getSections()) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/MessagePublisher.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/MessagePublisher.java
index 37adac7..c996e1d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/MessagePublisher.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/MessagePublisher.java
@@ -14,6 +14,7 @@
 
 package com.googlesource.gerrit.plugins.rabbitmq.message;
 
+import com.google.common.flogger.FluentLogger;
 import com.google.gerrit.extensions.events.LifecycleListener;
 import com.google.gerrit.server.events.Event;
 import com.google.gerrit.server.events.EventListener;
@@ -30,12 +31,10 @@
 import java.util.Timer;
 import java.util.TimerTask;
 import java.util.concurrent.LinkedBlockingQueue;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public class MessagePublisher implements Publisher, LifecycleListener {
 
-  private static final Logger LOGGER = LoggerFactory.getLogger(MessagePublisher.class);
+  private static final FluentLogger logger = FluentLogger.forEnclosingClass();
 
   private static final int MONITOR_FIRSTTIME_DELAY = 15000;
 
@@ -69,12 +68,13 @@
             }
             if (queue.offer(event)) {
               if (lostEventCount > 0) {
-                LOGGER.warn("Event queue is no longer full, {} events were lost", lostEventCount);
+                logger.atWarning().log(
+                    "Event queue is no longer full, %d events were lost", lostEventCount);
                 lostEventCount = 0;
               }
             } else {
               if (lostEventCount++ % 10 == 0) {
-                LOGGER.error("Event queue is full, lost {} event(s)", lostEventCount);
+                logger.atSevere().log("Event queue is full, lost %d event(s)", lostEventCount);
               }
             }
           }
@@ -95,10 +95,11 @@
                   }
                 }
                 if (!publishEvent(event) && !queue.offer(event)) {
-                  LOGGER.error("Event lost: {}", gson.toJson(event));
+                  logger.atSevere().log("Event lost: %s", gson.toJson(event));
                 }
               } catch (InterruptedException e) {
-                LOGGER.warn("Interupted while waiting for event or connection.", e);
+                logger.atWarning().withCause(e).log(
+                    "Interupted while waiting for event or connection.");
               }
             }
           }
@@ -130,7 +131,7 @@
             @Override
             public void run() {
               if (!isConnected()) {
-                LOGGER.info("#start: try to reconnect");
+                logger.atInfo().log("#start: try to reconnect");
                 connect();
               }
             }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/type/AMQPSession.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/type/AMQPSession.java
index 3ae3104..a1dd775 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/type/AMQPSession.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/type/AMQPSession.java
@@ -14,6 +14,7 @@
 
 package com.googlesource.gerrit.plugins.rabbitmq.session.type;
 
+import com.google.common.flogger.FluentLogger;
 import com.googlesource.gerrit.plugins.rabbitmq.config.Properties;
 import com.googlesource.gerrit.plugins.rabbitmq.config.section.AMQP;
 import com.googlesource.gerrit.plugins.rabbitmq.config.section.Exchange;
@@ -36,10 +37,9 @@
 import java.util.concurrent.atomic.AtomicInteger;
 import org.apache.commons.codec.CharEncoding;
 import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public final class AMQPSession implements Session {
+  private static final FluentLogger logger = FluentLogger.forEnclosingClass();
 
   private class ShutdownListenerImpl implements ShutdownListener {
 
@@ -62,10 +62,10 @@
           if (clazz == Channel.class) {
             Channel ch = Channel.class.cast(obj);
             if (cause.isInitiatedByApplication()) {
-              LOGGER.info(MSG("Channel #{} closed by application."), ch.getChannelNumber());
+              logger.atInfo().log(MSG("Channel #%d closed by application."), ch.getChannelNumber());
             } else {
-              LOGGER.warn(
-                  MSG("Channel #{} closed. Cause: {}"), ch.getChannelNumber(), cause.getMessage());
+              logger.atWarning().log(
+                  MSG("Channel #%dclosed. Cause: %s"), ch.getChannelNumber(), cause.getMessage());
             }
             if (ch.equals(AMQPSession.this.channel)) {
               AMQPSession.this.channel = null;
@@ -73,9 +73,9 @@
           } else if (clazz == Connection.class) {
             Connection conn = Connection.class.cast(obj);
             if (cause.isInitiatedByApplication()) {
-              LOGGER.info(MSG("Connection closed by application."));
+              logger.atInfo().log(MSG("Connection closed by application."));
             } else {
-              LOGGER.warn(MSG("Connection closed. Cause: {}"), cause.getMessage());
+              logger.atWarning().log(MSG("Connection closed. Cause: %s"), cause.getMessage());
             }
             if (conn.equals(AMQPSession.this.connection)) {
               AMQPSession.this.connection = null;
@@ -86,7 +86,6 @@
     }
   }
 
-  private static final Logger LOGGER = LoggerFactory.getLogger(AMQPSession.class);
   private final Properties properties;
   private volatile Connection connection;
   private volatile Channel channel;
@@ -120,13 +119,13 @@
         ch = connection.createChannel();
         ch.addShutdownListener(channelListener);
         failureCount.set(0);
-        LOGGER.info(MSG("Channel #{} opened."), ch.getChannelNumber());
+        logger.atInfo().log(MSG("Channel #%d opened."), ch.getChannelNumber());
       } catch (IOException | AlreadyClosedException ex) {
-        LOGGER.error(MSG("Failed to open channel."), ex);
+        logger.atSevere().withCause(ex).log(MSG("Failed to open channel."));
         failureCount.incrementAndGet();
       }
       if (failureCount.get() > properties.getSection(Monitor.class).failureCount) {
-        LOGGER.warn("Connection has something wrong. So will be disconnected.");
+        logger.atWarning().log("Creating channel failed %d times, closing connection.", failureCount.get());
         disconnect();
       }
     }
@@ -136,11 +135,11 @@
   @Override
   public boolean connect() {
     if (connection != null && connection.isOpen()) {
-      LOGGER.info(MSG("Already connected."));
+      logger.atInfo().log(MSG("Already connected."));
       return true;
     }
     AMQP amqp = properties.getSection(AMQP.class);
-    LOGGER.info(MSG("Connect to {}..."), amqp.uri);
+    logger.atInfo().log(MSG("Connect to %s..."), amqp.uri);
     ConnectionFactory factory = new ConnectionFactory();
     try {
       if (StringUtils.isNotEmpty(amqp.uri)) {
@@ -157,40 +156,40 @@
         }
         connection = factory.newConnection();
         connection.addShutdownListener(connectionListener);
-        LOGGER.info(MSG("Connection established."));
+        logger.atInfo().log(MSG("Connection established."));
         return true;
       }
     } catch (URISyntaxException ex) {
-      LOGGER.error(MSG("URI syntax error: {}"), amqp.uri);
+      logger.atSevere().log(MSG("URI syntax error: %s"), amqp.uri);
     } catch (IOException | TimeoutException ex) {
-      LOGGER.error(MSG("Connection cannot be opened."), ex);
+      logger.atSevere().withCause(ex).log(MSG("Connection cannot be opened."));
     } catch (KeyManagementException | NoSuchAlgorithmException ex) {
-      LOGGER.error(MSG("Security error when opening connection."), ex);
+      logger.atSevere().withCause(ex).log(MSG("Security error when opening connection."));
     }
     return false;
   }
 
   @Override
   public void disconnect() {
-    LOGGER.info(MSG("Disconnecting..."));
+    logger.atInfo().log(MSG("Disconnecting..."));
     try {
       if (channel != null) {
-        LOGGER.info(MSG("Closing Channel #{}..."), channel.getChannelNumber());
+        logger.atInfo().log(MSG("Closing Channel #%d..."), channel.getChannelNumber());
         channel.close();
       }
     } catch (IOException | TimeoutException ex) {
-      LOGGER.error(MSG("Error when closing channel."), ex);
+      logger.atSevere().withCause(ex).log(MSG("Error when closing channel."));
     } finally {
       channel = null;
     }
 
     try {
       if (connection != null) {
-        LOGGER.info(MSG("Closing Connection..."));
+        logger.atInfo().log(MSG("Closing Connection..."));
         connection.close();
       }
     } catch (IOException ex) {
-      LOGGER.error(MSG("Error when closing connection."), ex);
+      logger.atSevere().withCause(ex).log(MSG("Error when closing connection."));
     } finally {
       connection = null;
     }
@@ -205,7 +204,7 @@
       Message message = properties.getSection(Message.class);
       Exchange exchange = properties.getSection(Exchange.class);
       try {
-        LOGGER.debug(MSG("Sending message."));
+        logger.atFine().log(MSG("Sending message."));
         channel.basicPublish(
             exchange.name,
             message.routingKey,
@@ -213,11 +212,11 @@
             messageBody.getBytes(CharEncoding.UTF_8));
         return true;
       } catch (IOException ex) {
-        LOGGER.error(MSG("Error when sending meessage."), ex);
+        logger.atSevere().withCause(ex).log(MSG("Error when sending meessage."));
         return false;
       }
     }
-    LOGGER.error(MSG("Cannot open channel."));
+    logger.atSevere().log(MSG("Cannot open channel."));
     return false;
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/worker/DefaultEventWorker.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/worker/DefaultEventWorker.java
index 1916be3..53ed103 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/worker/DefaultEventWorker.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/worker/DefaultEventWorker.java
@@ -14,19 +14,18 @@
 
 package com.googlesource.gerrit.plugins.rabbitmq.worker;
 
+import com.google.common.flogger.FluentLogger;
 import com.google.gerrit.server.events.Event;
 import com.google.gerrit.server.events.EventListener;
 import com.google.inject.Singleton;
 import com.googlesource.gerrit.plugins.rabbitmq.message.Publisher;
 import java.util.Set;
 import java.util.concurrent.CopyOnWriteArraySet;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 @Singleton
 public class DefaultEventWorker implements EventListener, EventWorker {
 
-  private static final Logger LOGGER = LoggerFactory.getLogger(DefaultEventWorker.class);
+  private final FluentLogger logger = FluentLogger.forEnclosingClass();
 
   private final Set<Publisher> publishers = new CopyOnWriteArraySet<>();
 
@@ -37,7 +36,7 @@
 
   @Override
   public void addPublisher(String pluginName, Publisher publisher, String userName) {
-    LOGGER.warn("addPublisher() with username '{}' was called. Hence no operation.", userName);
+    logger.atWarning().log("addPublisher() with username '%s' was called. No-op.", userName);
   }
 
   @Override
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/worker/UserEventWorker.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/worker/UserEventWorker.java
index 32c1ec7..de21369 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/worker/UserEventWorker.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/worker/UserEventWorker.java
@@ -14,6 +14,7 @@
 
 package com.googlesource.gerrit.plugins.rabbitmq.worker;
 
+import com.google.common.flogger.FluentLogger;
 import com.google.gerrit.extensions.registration.DynamicSet;
 import com.google.gerrit.extensions.registration.RegistrationHandle;
 import com.google.gerrit.reviewdb.client.Account;
@@ -37,12 +38,10 @@
 import java.util.HashMap;
 import java.util.Map;
 import org.eclipse.jgit.errors.ConfigInvalidException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public class UserEventWorker implements EventWorker {
 
-  private static final Logger LOGGER = LoggerFactory.getLogger(UserEventWorker.class);
+  private final FluentLogger logger = FluentLogger.forEnclosingClass();
 
   private final DynamicSet<UserScopedEventListener> eventListeners;
   private final WorkQueue workQueue;
@@ -74,7 +73,7 @@
 
   @Override
   public void addPublisher(final Publisher publisher) {
-    LOGGER.warn("addPublisher() without username was called. Hence no operation.");
+    logger.atWarning().log("addPublisher() without username was called. No-op.");
   }
 
   @Override
@@ -118,8 +117,7 @@
                 try {
                   userAccount = accountResolver.find(userName);
                   if (userAccount == null) {
-                    LOGGER.error(
-                        "No single user could be found when searching for listenAs: {}", userName);
+                    logger.atSevere().log("Cannot find account for listenAs: %s", userName);
                     return;
                   }
                   final IdentifiedUser user = userFactory.create(userAccount.getId());
@@ -138,9 +136,9 @@
                             }
                           });
                   eventListenerRegistrations.put(publisher, registration);
-                  LOGGER.info("Listen events as : {}", userName);
+                  logger.atInfo().log("Listen events as : %s", userName);
                 } catch (OrmException | ConfigInvalidException | IOException e) {
-                  LOGGER.error("Could not query database for listenAs", e);
+                  logger.atSevere().withCause(e).log("Could not query database for listenAs");
                   return;
                 } finally {
                   threadLocalRequestContext.setContext(old);
