You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rp...@apache.org on 2017/08/14 16:25:06 UTC

logging-log4j-tools git commit: LOG4J2-2011 replace JCommander command line parser with picocli to let users run Log4j2 utility applications without requiring an external dependency

Repository: logging-log4j-tools
Updated Branches:
  refs/heads/master 0f66bc2b3 -> 0007b107b


LOG4J2-2011 replace JCommander command line parser with picocli to let users run Log4j2 utility applications without requiring an external dependency


Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-tools/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-tools/commit/0007b107
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-tools/tree/0007b107
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-tools/diff/0007b107

Branch: refs/heads/master
Commit: 0007b107b94f5b5024ea4aaa189bb8e0b7bf1c5c
Parents: 0f66bc2
Author: rpopma <rp...@apache.org>
Authored: Tue Aug 15 01:24:56 2017 +0900
Committer: rpopma <rp...@apache.org>
Committed: Tue Aug 15 01:24:56 2017 +0900

----------------------------------------------------------------------
 log4j-server/pom.xml                            |  5 ---
 .../log4j/server/AbstractSocketServer.java      | 17 +++-----
 .../logging/log4j/server/TcpSocketServer.java   | 45 ++++++++++----------
 .../logging/log4j/server/UdpSocketServer.java   | 21 ++++-----
 .../server/mom/jms/AbstractJmsReceiver.java     |  4 +-
 pom.xml                                         |  7 +--
 6 files changed, 43 insertions(+), 56 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j-tools/blob/0007b107/log4j-server/pom.xml
----------------------------------------------------------------------
diff --git a/log4j-server/pom.xml b/log4j-server/pom.xml
index 9674ab8..d5493c3 100644
--- a/log4j-server/pom.xml
+++ b/log4j-server/pom.xml
@@ -40,11 +40,6 @@
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-core</artifactId>
     </dependency>
-    <!-- Command line parsing -->
-    <dependency>
-      <groupId>com.beust</groupId>
-      <artifactId>jcommander</artifactId>
-    </dependency>
     <!-- Used for JMS server (needs an implementation of course) -->
     <dependency>
       <groupId>org.jboss.spec.javax.jms</groupId>

http://git-wip-us.apache.org/repos/asf/logging-log4j-tools/blob/0007b107/log4j-server/src/main/java/org/apache/logging/log4j/server/AbstractSocketServer.java
----------------------------------------------------------------------
diff --git a/log4j-server/src/main/java/org/apache/logging/log4j/server/AbstractSocketServer.java b/log4j-server/src/main/java/org/apache/logging/log4j/server/AbstractSocketServer.java
index e2dff83..4f487f5 100644
--- a/log4j-server/src/main/java/org/apache/logging/log4j/server/AbstractSocketServer.java
+++ b/log4j-server/src/main/java/org/apache/logging/log4j/server/AbstractSocketServer.java
@@ -30,8 +30,6 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
 
-import com.beust.jcommander.Parameter;
-import com.beust.jcommander.validators.PositiveInteger;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LogEventListener;
@@ -41,8 +39,8 @@ import org.apache.logging.log4j.core.config.ConfigurationSource;
 import org.apache.logging.log4j.core.config.xml.XmlConfiguration;
 import org.apache.logging.log4j.core.config.xml.XmlConfigurationFactory;
 import org.apache.logging.log4j.core.util.BasicCommandLineArguments;
-import org.apache.logging.log4j.core.util.InetAddressConverter;
 import org.apache.logging.log4j.core.util.Log4jThread;
+import org.apache.logging.log4j.core.util.picocli.CommandLine.Option;
 import org.apache.logging.log4j.util.Strings;
 
 /**
@@ -57,22 +55,19 @@ public abstract class AbstractSocketServer<T extends InputStream> extends LogEve
 
     protected static class CommandLineArguments extends BasicCommandLineArguments {
 
-        @Parameter(names = { "--config", "-c" }, description = "Log4j configuration file location (path or URL).")
+        @Option(names = { "--config", "-c" }, description = "Log4j configuration file location (path or URL).")
         private String configLocation;
 
-        @Parameter(names = { "--interactive",
-                "-i" }, description = "Accepts commands on standard input (\"exit\" is the only command).")
+        @Option(names = { "--interactive", "-i" }, description = "Accepts commands on standard input (\"exit\" is the only command).")
         private boolean interactive;
 
-        @Parameter(names = { "--port",
-                "-p" }, validateWith = PositiveInteger.class, description = "The server port number, or 0 to automatically allocate a port number.")
+        @Option(names = { "--port", "-p" }, description = "The server port number, or 0 to automatically allocate a port number.")
         private int port;
 
-        @Parameter(names = { "--localbindaddress",
-                "-a" }, converter = InetAddressConverter.class, description = "Server socket local bind address.")
+        @Option(names = { "--localbindaddress", "-a" }, description = "Server socket local bind address.")
         private InetAddress localBindAddress;
 
-        @Parameter(names = {"--classes", "-C"}, description = "Additional classes to allow deserialization")
+        @Option(names = {"--classes", "-C"}, description = "Additional classes to allow deserialization")
         private List<String> allowedClasses;
 
         String getConfigLocation() {

http://git-wip-us.apache.org/repos/asf/logging-log4j-tools/blob/0007b107/log4j-server/src/main/java/org/apache/logging/log4j/server/TcpSocketServer.java
----------------------------------------------------------------------
diff --git a/log4j-server/src/main/java/org/apache/logging/log4j/server/TcpSocketServer.java b/log4j-server/src/main/java/org/apache/logging/log4j/server/TcpSocketServer.java
index 51c071c..50e1d82 100644
--- a/log4j-server/src/main/java/org/apache/logging/log4j/server/TcpSocketServer.java
+++ b/log4j-server/src/main/java/org/apache/logging/log4j/server/TcpSocketServer.java
@@ -30,28 +30,29 @@ import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 
-import com.beust.jcommander.Parameter;
-import com.beust.jcommander.validators.PositiveInteger;
 import org.apache.logging.log4j.core.config.ConfigurationFactory;
 import org.apache.logging.log4j.core.parser.ParseException;
-import org.apache.logging.log4j.core.util.BasicCommandLineArguments;
 import org.apache.logging.log4j.core.util.Closer;
 import org.apache.logging.log4j.core.util.Log4jThread;
+import org.apache.logging.log4j.core.util.picocli.CommandLine;
+import org.apache.logging.log4j.core.util.picocli.CommandLine.Command;
+import org.apache.logging.log4j.core.util.picocli.CommandLine.Option;
 import org.apache.logging.log4j.message.EntryMessage;
 
 /**
  * Listens for Log4j events on a TCP server socket and passes them on to Log4j.
- * 
+ *
  * @param <T>
  *        The kind of input stream read
  * @see #main(String[])
  */
 public class TcpSocketServer<T extends InputStream> extends AbstractSocketServer<T> {
 
+    @Command(name = "TcpSocketServer")
     protected static class CommandLineArguments extends AbstractSocketServer.CommandLineArguments {
-        
-        @Parameter(names = { "--backlog",
-                "-b" }, validateWith = PositiveInteger.class, description = "Server socket backlog.")
+
+        @Option(names = { "--backlog",
+                "-b" }, description = "Server socket backlog. Must be a positive integer.")
         // Same default as ServerSocket
         private int backlog = 50;
 
@@ -61,8 +62,7 @@ public class TcpSocketServer<T extends InputStream> extends AbstractSocketServer
 
         void setBacklog(final int backlog) {
             this.backlog = backlog;
-        }        
-
+        }
     }
 
     /**
@@ -118,7 +118,7 @@ public class TcpSocketServer<T extends InputStream> extends AbstractSocketServer
 
     /**
      * Creates a socket server that reads JSON log events.
-     * 
+     *
      * @param port
      *        The port number, or 0 to automatically allocate a port number.
      * @return a new a socket server
@@ -155,7 +155,7 @@ public class TcpSocketServer<T extends InputStream> extends AbstractSocketServer
 
     /**
      * Creates a socket server that reads serialized log events.
-     * 
+     *
      * @param port
      *        The port number, or 0 to automatically allocate a port number.
      * @return a new a socket server
@@ -170,7 +170,7 @@ public class TcpSocketServer<T extends InputStream> extends AbstractSocketServer
 
     /**
      * Creates a socket server that reads serialized log events.
-     * 
+     *
      * @param port
      *        The port number, or 0 to automatically allocate a port number.
      * @param backlog
@@ -213,7 +213,7 @@ public class TcpSocketServer<T extends InputStream> extends AbstractSocketServer
 
     /**
      * Creates a socket server that reads XML log events.
-     * 
+     *
      * @param port
      *        The port number, or 0 to automatically allocate a port number.
      * @return a new a socket server
@@ -251,22 +251,23 @@ public class TcpSocketServer<T extends InputStream> extends AbstractSocketServer
 
     /**
      * Main startup for the server. Run with "--help" for to print command line help on the console.
-     * 
+     *
      * @param args
      *        The command line arguments.
      * @throws Exception
      *         if an error occurs.
      */
     public static void main(final String[] args) throws Exception {
-        final CommandLineArguments cla = BasicCommandLineArguments.parseCommandLine(args, TcpSocketServer.class, new CommandLineArguments());
-        if (cla.isHelp()) {
+        CommandLineArguments cla = CommandLine.populateCommand(new CommandLineArguments(), args);
+        if (cla.isHelp() || cla.backlog < 0 || cla.getPort() < 0) {
+            CommandLine.usage(cla, System.err);
             return;
         }
         if (cla.getConfigLocation() != null) {
             ConfigurationFactory.setConfigurationFactory(new ServerConfigurationFactory(cla.getConfigLocation()));
         }
         final TcpSocketServer<InputStream> socketServer = TcpSocketServer.createJsonSocketServer(
-            cla.getPort(), cla.getBacklog(), cla.getLocalBindAddress());
+                cla.getPort(), cla.getBacklog(), cla.getLocalBindAddress());
         final Thread serverThread = socketServer.startNewThread();
         if (cla.isInteractive()) {
             socketServer.awaitTermination(serverThread);
@@ -279,7 +280,7 @@ public class TcpSocketServer<T extends InputStream> extends AbstractSocketServer
 
     /**
      * Constructor.
-     * 
+     *
      * @param port
      *        The port number, or 0 to automatically allocate a port number.
      * @param backlog
@@ -299,9 +300,9 @@ public class TcpSocketServer<T extends InputStream> extends AbstractSocketServer
 
     /**
      * Constructor.
-     * 
+     *
      * @param port
-     *         The port number, or 0 to automatically allocate a port number. 
+     *         The port number, or 0 to automatically allocate a port number.
      * @param logEventInput
      *        the log even input
      * @throws IOException
@@ -314,7 +315,7 @@ public class TcpSocketServer<T extends InputStream> extends AbstractSocketServer
 
     /**
      * Constructor.
-     * 
+     *
      * @param port
      *        to listen.
      * @param logEventInput
@@ -379,7 +380,7 @@ public class TcpSocketServer<T extends InputStream> extends AbstractSocketServer
 
     /**
      * Shutdown the server.
-     * 
+     *
      * @throws IOException if the server socket could not be closed
      */
     @Override

http://git-wip-us.apache.org/repos/asf/logging-log4j-tools/blob/0007b107/log4j-server/src/main/java/org/apache/logging/log4j/server/UdpSocketServer.java
----------------------------------------------------------------------
diff --git a/log4j-server/src/main/java/org/apache/logging/log4j/server/UdpSocketServer.java b/log4j-server/src/main/java/org/apache/logging/log4j/server/UdpSocketServer.java
index db66653..533c4b2 100644
--- a/log4j-server/src/main/java/org/apache/logging/log4j/server/UdpSocketServer.java
+++ b/log4j-server/src/main/java/org/apache/logging/log4j/server/UdpSocketServer.java
@@ -28,11 +28,11 @@ import java.util.List;
 
 import org.apache.logging.log4j.core.config.ConfigurationFactory;
 import org.apache.logging.log4j.core.parser.ParseException;
-import org.apache.logging.log4j.core.util.BasicCommandLineArguments;
+import org.apache.logging.log4j.core.util.picocli.CommandLine;
 
 /**
- * Listens for Log4j events on a datagram socket and passes them on to Log4j. 
- * 
+ * Listens for Log4j events on a datagram socket and passes them on to Log4j.
+ *
  * @param <T>
  *            The kind of input stream read
  * @see #main(String[])
@@ -41,7 +41,7 @@ public class UdpSocketServer<T extends InputStream> extends AbstractSocketServer
 
     /**
      * Creates a socket server that reads JSON log events.
-     * 
+     *
      * @param port
      *            the port to listen
      * @return a new a socket server
@@ -54,7 +54,7 @@ public class UdpSocketServer<T extends InputStream> extends AbstractSocketServer
 
     /**
      * Creates a socket server that reads serialized log events.
-     * 
+     *
      * @param port
      *            the port to listen
      * @return a new a socket server
@@ -82,7 +82,7 @@ public class UdpSocketServer<T extends InputStream> extends AbstractSocketServer
 
     /**
      * Creates a socket server that reads XML log events.
-     * 
+     *
      * @param port
      *            the port to listen
      * @return a new a socket server
@@ -95,15 +95,16 @@ public class UdpSocketServer<T extends InputStream> extends AbstractSocketServer
 
     /**
      * Main startup for the server. Run with "--help" for to print command line help on the console.
-     * 
+     *
      * @param args
      *            The command line arguments.
      * @throws Exception
      *             if an error occurs.
      */
     public static void main(final String[] args) throws Exception {
-        final CommandLineArguments cla = BasicCommandLineArguments.parseCommandLine(args, UdpSocketServer.class, new CommandLineArguments());
-        if (cla.isHelp()) {
+        final CommandLineArguments cla = CommandLine.populateCommand(new CommandLineArguments(), args);
+        if (cla.isHelp() || cla.getPort() < 0) {
+            CommandLine.usage(cla, System.err);
             return;
         }
         if (cla.getConfigLocation() != null) {
@@ -124,7 +125,7 @@ public class UdpSocketServer<T extends InputStream> extends AbstractSocketServer
 
     /**
      * Constructor.
-     * 
+     *
      * @param port
      *            to listen on.
      * @param logEventInput

http://git-wip-us.apache.org/repos/asf/logging-log4j-tools/blob/0007b107/log4j-server/src/main/java/org/apache/logging/log4j/server/mom/jms/AbstractJmsReceiver.java
----------------------------------------------------------------------
diff --git a/log4j-server/src/main/java/org/apache/logging/log4j/server/mom/jms/AbstractJmsReceiver.java b/log4j-server/src/main/java/org/apache/logging/log4j/server/mom/jms/AbstractJmsReceiver.java
index 9103d69..a85d2f6 100644
--- a/log4j-server/src/main/java/org/apache/logging/log4j/server/mom/jms/AbstractJmsReceiver.java
+++ b/log4j-server/src/main/java/org/apache/logging/log4j/server/mom/jms/AbstractJmsReceiver.java
@@ -39,7 +39,7 @@ public abstract class AbstractJmsReceiver {
 
     /**
      * Executes a JmsServer with the given command line arguments.
-     * 
+     *
      * @param interactive
      *            Whether or not this is an interactive application by providing a command line and exit on error.
      * @param args
@@ -48,7 +48,7 @@ public abstract class AbstractJmsReceiver {
      * @throws Exception
      */
     protected void doMain(boolean interactive, final String... args) throws Exception {
-        // TODO Too many args, Use JCommander
+        // TODO Too many args, Use picocli
         if (args.length < 5) {
             usage();
             if (interactive) {

http://git-wip-us.apache.org/repos/asf/logging-log4j-tools/blob/0007b107/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index d28a3c0..ca95638 100644
--- a/pom.xml
+++ b/pom.xml
@@ -217,11 +217,6 @@
   <dependencyManagement>
     <dependencies>
       <dependency>
-        <groupId>com.beust</groupId>
-        <artifactId>jcommander</artifactId>
-        <version>1.48</version>
-      </dependency>
-      <dependency>
         <groupId>org.apache.logging.log4j</groupId>
         <artifactId>log4j-api</artifactId>
         <version>${project.version}</version>
@@ -429,7 +424,7 @@
               <goals>
                 <goal>report</goal>
               </goals>
-            </execution>          
+            </execution>
           </executions>
         </plugin>
       </plugins>