Log publishing of stream events in message_log file

Currently, when the plugin publishes a stream event to Kinesis, the
message_log file is not updated. This is in contrast with other types
of events, which are logged in the file upon successful publishing of
the messages.

Bring the logging on stream events publishing in-line with other gerrit
events. Upon successful publishing of the event, update the message_log
file with the direction, stream name and message payload.

Bug: Issue 294904654
Change-Id: I90073b82781eb3e2d19ad43f1fd89020bd233aa0
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);
+  }
+}