You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by je...@apache.org on 2019/04/08 21:43:51 UTC

[geode] branch develop updated: GEODE-6602: gfsh commands should be logged in locator log (#3414)

This is an automated email from the ASF dual-hosted git repository.

jensdeppe pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/develop by this push:
     new a1d6da3  GEODE-6602: gfsh commands should be logged in locator log (#3414)
a1d6da3 is described below

commit a1d6da3f2a939a6ab55541e33d5245153d979379
Author: Jens Deppe <jd...@pivotal.io>
AuthorDate: Mon Apr 8 14:43:40 2019 -0700

    GEODE-6602: gfsh commands should be logged in locator log (#3414)
---
 .../cli/commands/GfshCommandIntegrationTest.java   | 33 ++++++++++++++++++++++
 .../internal/cli/remote/CommandExecutor.java       |  6 ++++
 2 files changed, 39 insertions(+)

diff --git a/geode-core/src/integrationTest/java/org/apache/geode/management/internal/cli/commands/GfshCommandIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/management/internal/cli/commands/GfshCommandIntegrationTest.java
index b5429f7..a7248cf 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/management/internal/cli/commands/GfshCommandIntegrationTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/management/internal/cli/commands/GfshCommandIntegrationTest.java
@@ -15,11 +15,20 @@
 
 package org.apache.geode.management.internal.cli.commands;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.List;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.Logger;
+import org.apache.logging.log4j.test.appender.ListAppender;
 import org.junit.ClassRule;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
+import org.apache.geode.management.internal.cli.remote.CommandExecutor;
 import org.apache.geode.test.junit.categories.GfshTest;
 import org.apache.geode.test.junit.rules.GfshCommandRule;
 import org.apache.geode.test.junit.rules.LocatorStarterRule;
@@ -42,4 +51,28 @@ public class GfshCommandIntegrationTest {
     gfsh.connectAndVerify(locator);
     gfsh.executeAndAssertThat("abc").statusIsError().containsOutput("Command 'abc' not found");
   }
+
+  @Test
+  public void commandsAreLoggedAndRedacted() {
+    Logger logger = (Logger) LogManager.getLogger(CommandExecutor.class);
+    ListAppender listAppender = new ListAppender("ListAppender");
+    logger.addAppender(listAppender);
+    listAppender.start();
+
+    gfsh.executeAndAssertThat(
+        "start locator --properties-file=unknown --J=-Dgemfire.security-password=bob")
+        .statusIsError();
+    gfsh.executeAndAssertThat("connect --password=secret").statusIsError();
+
+    List<LogEvent> logEvents = listAppender.getEvents();
+    assertThat(logEvents.size()).as("There should be exactly 2 log events").isEqualTo(2);
+
+    String logMessage = logEvents.get(0).getMessage().getFormattedMessage();
+    assertThat(logEvents.get(0).getMessage().getFormattedMessage()).isEqualTo(
+        "Executing command: start locator --properties-file=unknown --J=-Dgemfire.security-password=********");
+    assertThat(logEvents.get(1).getMessage().getFormattedMessage())
+        .isEqualTo("Executing command: connect --password=********");
+
+    logger.removeAppender(listAppender);
+  }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/remote/CommandExecutor.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/remote/CommandExecutor.java
index d9e223b..5ed084a 100755
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/remote/CommandExecutor.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/remote/CommandExecutor.java
@@ -27,6 +27,7 @@ import org.springframework.util.ReflectionUtils;
 import org.apache.geode.SystemFailure;
 import org.apache.geode.distributed.internal.InternalConfigurationPersistenceService;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.util.ArgumentRedactor;
 import org.apache.geode.management.cli.Result;
 import org.apache.geode.management.cli.SingleGfshCommand;
 import org.apache.geode.management.cli.UpdateAllConfigurationGroupsMarker;
@@ -59,6 +60,11 @@ public class CommandExecutor {
 
   // used by the GfshParserRule to pass in a mock command
   public Object execute(Object command, GfshParseResult parseResult) {
+    String userInput = parseResult.getUserInput();
+    if (userInput != null) {
+      logger.info("Executing command: " + ArgumentRedactor.redact(userInput));
+    }
+
     try {
       Object result = invokeCommand(command, parseResult);