diff --git a/java/org/apache/catalina/startup/LocalStrings.properties b/java/org/apache/catalina/startup/LocalStrings.properties
index d29e542..147aac4 100644
--- a/java/org/apache/catalina/startup/LocalStrings.properties
+++ b/java/org/apache/catalina/startup/LocalStrings.properties
@@ -132,6 +132,7 @@
 versionLoggerListener.vm.vendor                =JVM Vendor:            {0}
 versionLoggerListener.catalina.base            =CATALINA_BASE:         {0}
 versionLoggerListener.catalina.home            =CATALINA_HOME:         {0}
-versionLoggerListener.env                      =Environment variable:  {0} = {1}
 versionLoggerListener.arg                      =Command line argument: {0}
+versionLoggerListener.env                      =Environment variable:  {0} = {1}
+versionLoggerListener.prop                     =System property:       {0} = {1}
 webAnnotationSet.invalidInjection=Invalid method resource injection annotation.
diff --git a/java/org/apache/catalina/startup/VersionLoggerListener.java b/java/org/apache/catalina/startup/VersionLoggerListener.java
index a9c4e3e..a4f944b 100644
--- a/java/org/apache/catalina/startup/VersionLoggerListener.java
+++ b/java/org/apache/catalina/startup/VersionLoggerListener.java
@@ -19,8 +19,8 @@
 import java.lang.management.ManagementFactory;
 import java.util.List;
 import java.util.Map;
-import java.util.SortedSet;
-import java.util.TreeSet;
+import java.util.SortedMap;
+import java.util.TreeMap;
 
 import org.apache.catalina.Lifecycle;
 import org.apache.catalina.LifecycleEvent;
@@ -44,6 +44,7 @@
 
     private boolean logArgs = true;
     private boolean logEnv = false;
+    private boolean logProps = false;
 
 
     public boolean getLogArgs() {
@@ -66,6 +67,16 @@
     }
 
 
+    public boolean getLogProps() {
+        return logProps;
+    }
+
+
+    public void setLogProps(boolean logProps) {
+        this.logProps = logProps;
+    }
+
+
     @Override
     public void lifecycleEvent(LifecycleEvent event) {
         if (Lifecycle.BEFORE_INIT_EVENT.equals(event.getType())) {
@@ -106,10 +117,19 @@
         }
 
         if (logEnv) {
-            Map<String,String> envs = System.getenv();
-            SortedSet<String> keys = new TreeSet<>(envs.keySet());
-            for (String key : keys) {
-                log.info(sm.getString("versionLoggerListener.env", key, envs.get(key)));
+            SortedMap<String, String> sortedMap = new TreeMap<>(System.getenv());
+            for (Map.Entry<String, String> e : sortedMap.entrySet()) {
+                log.info(sm.getString("versionLoggerListener.env", e.getKey(), e.getValue()));
+            }
+        }
+
+        if (logProps) {
+            SortedMap<String, String> sortedMap = new TreeMap<>();
+            for (Map.Entry<Object, Object> e : System.getProperties().entrySet()) {
+                sortedMap.put(String.valueOf(e.getKey()), String.valueOf(e.getValue()));
+            }
+            for (Map.Entry<String, String> e : sortedMap.entrySet()) {
+                log.info(sm.getString("versionLoggerListener.prop", e.getKey(), e.getValue()));
             }
         }
     }
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index d43dc4e..82fe741 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -102,6 +102,10 @@
         Ensure that when static resources are served from JARs, only static
         resources are served. (markt)
       </fix>
+      <add>
+        Allow <code>VersionLoggerListener</code> to log all system properties.
+        This feature is off by default. (kkolinko)
+      </add>
     </changelog>
   </subsection>
   <subsection name="Jasper">
diff --git a/webapps/docs/config/listeners.xml b/webapps/docs/config/listeners.xml
index e7bb205..5a871bc 100644
--- a/webapps/docs/config/listeners.xml
+++ b/webapps/docs/config/listeners.xml
@@ -446,6 +446,12 @@
         <code>false</code> will be used.</p>
       </attribute>
 
+      <attribute name="logProps" required="false">
+        <p>If <code>true</code>, the current Java system properties will be
+        logged. If not specified, the default value of
+        <code>false</code> will be used.</p>
+      </attribute>
+
     </attributes>
 
   </subsection>
