diff --git a/src/main/java/com/googlesource/gerrit/plugins/pubsub/Log4jPubsubMessageLogger.java b/src/main/java/com/googlesource/gerrit/plugins/pubsub/Log4jPubsubMessageLogger.java
new file mode 100644
index 0000000..ac3f984
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/pubsub/Log4jPubsubMessageLogger.java
@@ -0,0 +1,38 @@
+// Copyright (C) 2023 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.googlesource.gerrit.plugins.pubsub;
+
+import com.google.gerrit.extensions.systemstatus.ServerInformation;
+import com.google.gerrit.server.util.PluginLogFile;
+import com.google.gerrit.server.util.SystemLog;
+import com.google.inject.Inject;
+import org.apache.log4j.PatternLayout;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class Log4jPubsubMessageLogger extends PluginLogFile {
+  private static final String LOG_NAME = "message_log";
+  private final Logger msgLog;
+
+  @Inject
+  public Log4jPubsubMessageLogger(SystemLog systemLog, ServerInformation serverInfo) {
+    super(systemLog, serverInfo, LOG_NAME, new PatternLayout("[%d{ISO8601}] [%t] %-5p : %m%n"));
+    this.msgLog = LoggerFactory.getLogger(LOG_NAME);
+  }
+
+  public void log(String topic, String event) {
+    msgLog.info("PUBLISH {} {}", topic, event);
+  }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/pubsub/PubSubPublisher.java b/src/main/java/com/googlesource/gerrit/plugins/pubsub/PubSubPublisher.java
index 2a030c9..29d4342 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/pubsub/PubSubPublisher.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/pubsub/PubSubPublisher.java
@@ -46,6 +46,7 @@
   private final String topic;
   private final Publisher publisher;
   private final PubSubConfiguration pubSubProperties;
+  private final Log4jPubsubMessageLogger msgLog;
 
   @Inject
   public PubSubPublisher(
@@ -53,13 +54,15 @@
       PublisherProvider publisherProvider,
       @EventGson Gson gson,
       PubSubPublisherMetrics publisherMetrics,
-      @Assisted String topic)
+      @Assisted String topic,
+      Log4jPubsubMessageLogger msgLog)
       throws IOException {
     this.gson = gson;
     this.publisherMetrics = publisherMetrics;
     this.topic = topic;
     this.publisher = publisherProvider.get(topic);
     this.pubSubProperties = pubSubProperties;
+    this.msgLog = msgLog;
   }
 
   public ListenableFuture<Boolean> publish(Event event) {
@@ -92,6 +95,7 @@
                 messageId, topic, pubsubMessage.getData().toStringUtf8());
 
             publisherMetrics.incrementSucceedToPublishMessage();
+            msgLog.log(topic, pubsubMessage.getData().toStringUtf8());
           }
         },
         MoreExecutors.directExecutor());
diff --git a/src/test/java/com/googlesource/gerrit/plugins/pubsub/PubSubPublisherTest.java b/src/test/java/com/googlesource/gerrit/plugins/pubsub/PubSubPublisherTest.java
index d88f9d4..2c85652 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/pubsub/PubSubPublisherTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/pubsub/PubSubPublisherTest.java
@@ -39,6 +39,7 @@
   @Mock PublisherProvider publisherProviderMock;
   @Mock Publisher publisherMock;
   @Mock PubSubPublisherMetrics pubSubPublisherMetricsMock;
+  @Mock Log4jPubsubMessageLogger msgLog;
 
   private static final String TOPIC = "foo";
   private static final Event eventMessage = new ProjectCreatedEvent();
@@ -52,7 +53,8 @@
             publisherProviderMock,
             OutputFormat.JSON_COMPACT.newGson(),
             pubSubPublisherMetricsMock,
-            TOPIC);
+            TOPIC,
+            msgLog);
   }
 
   @Test
@@ -73,4 +75,18 @@
 
     verify(pubSubPublisherMetricsMock, only()).incrementSucceedToPublishMessage();
   }
+
+  @Test
+  public void shouldUpdateMessageLogFileWhenAsyncPublishSucceeds() {
+    when(publisherMock.publish(any())).thenReturn(ApiFutures.immediateFuture("some-message-id"));
+
+    objectUnderTest.publish(eventMessage);
+
+    verify(msgLog)
+        .log(
+            TOPIC,
+            String.format(
+                "{\"type\":\"%s\",\"event_created_on\":%d}",
+                eventMessage.type, eventMessage.eventCreatedOn));
+  }
 }
