Merge branch 'stable-3.8' into stable-3.9

* stable-3.8:
  Log publishing of stream events in message_log file

Change-Id: I034f0b8cfc217160dffb6f2ed3cc786e23575eb0
diff --git a/src/main/java/com/googlesource/gerrit/plugins/kinesis/KinesisPublisher.java b/src/main/java/com/googlesource/gerrit/plugins/kinesis/KinesisPublisher.java
index 158f8ac..ad5baa5 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/kinesis/KinesisPublisher.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/kinesis/KinesisPublisher.java
@@ -41,6 +41,7 @@
   private final KinesisProducer kinesisProducer;
   private final Configuration configuration;
   private final ExecutorService callBackExecutor;
+  private final Log4jKinesisMessageLogger msgLog;
 
   private final Gson gson;
 
@@ -49,11 +50,13 @@
       @EventGson Gson gson,
       KinesisProducer kinesisProducer,
       Configuration configuration,
-      @ProducerCallbackExecutor ExecutorService callBackExecutor) {
+      @ProducerCallbackExecutor ExecutorService callBackExecutor,
+      Log4jKinesisMessageLogger msgLog) {
     this.gson = gson;
     this.kinesisProducer = kinesisProducer;
     this.configuration = configuration;
     this.callBackExecutor = callBackExecutor;
+    this.msgLog = msgLog;
   }
 
   @Override
@@ -106,6 +109,7 @@
                   partitionKey,
                   result.getSequenceNumber(),
                   result.getAttempts().size());
+              msgLog.log(streamName, stringEvent);
             }
 
             @Override
diff --git a/src/main/java/com/googlesource/gerrit/plugins/kinesis/Log4jKinesisMessageLogger.java b/src/main/java/com/googlesource/gerrit/plugins/kinesis/Log4jKinesisMessageLogger.java
new file mode 100644
index 0000000..d5d6372
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/kinesis/Log4jKinesisMessageLogger.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.kinesis;
+
+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 Log4jKinesisMessageLogger extends PluginLogFile {
+  private static final String LOG_NAME = "message_log";
+  private final Logger msgLog;
+
+  @Inject
+  public Log4jKinesisMessageLogger(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 streamName, String event) {
+    msgLog.info("PUBLISH {} {}", streamName, event);
+  }
+}