I'm tempted to write some Spring Boot standalone server examples since they're super easy to work with. Would that make sense to go in logging-log4j-tools?
On 7 January 2017 at 14:51, Mikael Ståldal <mikael.stal...@magine.com> wrote: > I think that all those standalone servers in log4j-core should be moved to > one or more new modules (see LOG4J-1650). > > On Jan 4, 2017 7:43 PM, "Gary Gregory" <garydgreg...@gmail.com> wrote: > >> This is an OK dependency IMO, it provides great bang for the buck. (I >> would say that of course since I added the dep) >> >> Gary >> >> On Wed, Jan 4, 2017 at 7:30 AM, Matt Sicker <boa...@gmail.com> wrote: >> >>> I think that's from LOG4J2-1604. >>> >>> On 4 January 2017 at 07:48, Remko Popma <remko.po...@gmail.com> wrote: >>> >>>> Hey, I just noticed this, but can we remove the dependency on >>>> com.beust.jcommander for TcpSocketServer? This is a standalone app and it >>>> would be nice for users if it could be run with just the core and api jars. >>>> >>>> Sent from my iPhone >>>> >>>> > On Jan 4, 2017, at 12:52, mattsic...@apache.org wrote: >>>> > >>>> > Repository: logging-log4j2 >>>> > Updated Branches: >>>> > refs/heads/master 89b229755 -> fe4296a4c >>>> > >>>> > >>>> > Refactor duplicate await shutdown code >>>> > >>>> > >>>> > Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo >>>> > Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit >>>> /5bc69e29 >>>> > Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/5 >>>> bc69e29 >>>> > Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/5 >>>> bc69e29 >>>> > >>>> > Branch: refs/heads/master >>>> > Commit: 5bc69e295bca1714c2c2eca1a848ca3469a3aed8 >>>> > Parents: 89b2297 >>>> > Author: Matt Sicker <matt.sic...@spr.com> >>>> > Authored: Tue Jan 3 21:39:08 2017 -0600 >>>> > Committer: Matt Sicker <matt.sic...@spr.com> >>>> > Committed: Tue Jan 3 21:39:08 2017 -0600 >>>> > >>>> > ------------------------------------------------------------ >>>> ---------- >>>> > .../core/net/server/AbstractSocketServer.java | 28 >>>> ++++++++++++++++---- >>>> > .../log4j/core/net/server/TcpSocketServer.java | 24 >>>> ++++------------- >>>> > .../log4j/core/net/server/UdpSocketServer.java | 18 +++---------- >>>> > 3 files changed, 31 insertions(+), 39 deletions(-) >>>> > ------------------------------------------------------------ >>>> ---------- >>>> > >>>> > >>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/5 >>>> bc69e29/log4j-core/src/main/java/org/apache/logging/log4j/co >>>> re/net/server/AbstractSocketServer.java >>>> > ------------------------------------------------------------ >>>> ---------- >>>> > diff --git a/log4j-core/src/main/java/org >>>> /apache/logging/log4j/core/net/server/AbstractSocketServer.java >>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/net >>>> /server/AbstractSocketServer.java >>>> > index 80ba6f0..9836694 100644 >>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net >>>> /server/AbstractSocketServer.java >>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net >>>> /server/AbstractSocketServer.java >>>> > @@ -16,13 +16,14 @@ >>>> > */ >>>> > package org.apache.logging.log4j.core.net.server; >>>> > >>>> > +import java.io.BufferedReader; >>>> > import java.io.File; >>>> > import java.io.FileInputStream; >>>> > import java.io.FileNotFoundException; >>>> > import java.io.IOException; >>>> > import java.io.InputStream; >>>> > +import java.io.InputStreamReader; >>>> > import java.net.InetAddress; >>>> > -import java.net.MalformedURLException; >>>> > import java.net.URI; >>>> > import java.net.URL; >>>> > import java.util.Objects; >>>> > @@ -44,10 +45,10 @@ import org.apache.logging.log4j.util.Strings; >>>> > >>>> > /** >>>> > * Abstract socket server for TCP and UDP implementations. >>>> > - * >>>> > + * >>>> > * @param <T> >>>> > * The kind of input stream read >>>> > - * >>>> > + * >>>> > * TODO Make a LifeCycle >>>> > */ >>>> > public abstract class AbstractSocketServer<T extends InputStream> >>>> extends LogEventListener implements Runnable { >>>> > @@ -158,7 +159,7 @@ public abstract class AbstractSocketServer<T >>>> extends InputStream> extends LogEve >>>> > >>>> > /** >>>> > * Creates a new socket server. >>>> > - * >>>> > + * >>>> > * @param port >>>> > * listen to this port >>>> > * @param logEventInput >>>> > @@ -179,7 +180,7 @@ public abstract class AbstractSocketServer<T >>>> extends InputStream> extends LogEve >>>> > >>>> > /** >>>> > * Start this server in a new thread. >>>> > - * >>>> > + * >>>> > * @return the new thread that running this server. >>>> > */ >>>> > public Thread startNewThread() { >>>> > @@ -188,4 +189,21 @@ public abstract class AbstractSocketServer<T >>>> extends InputStream> extends LogEve >>>> > return thread; >>>> > } >>>> > >>>> > + public abstract void shutdown() throws Exception; >>>> > + >>>> > + public void awaitTermination(final Thread serverThread) throws >>>> Exception { >>>> > + final BufferedReader reader = new BufferedReader(new >>>> InputStreamReader(System.in)); >>>> > + while (true) { >>>> > + final String line = reader.readLine(); >>>> > + if (line == null >>>> > + || line.equalsIgnoreCase("quit") >>>> > + || line.equalsIgnoreCase("stop") >>>> > + || line.equalsIgnoreCase("exit")) { >>>> > + this.shutdown(); >>>> > + serverThread.join(); >>>> > + break; >>>> > + } >>>> > + } >>>> > + } >>>> > + >>>> > } >>>> > >>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/5 >>>> bc69e29/log4j-core/src/main/java/org/apache/logging/log4j/co >>>> re/net/server/TcpSocketServer.java >>>> > ------------------------------------------------------------ >>>> ---------- >>>> > diff --git a/log4j-core/src/main/java/org >>>> /apache/logging/log4j/core/net/server/TcpSocketServer.java >>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/net >>>> /server/TcpSocketServer.java >>>> > index 636e6f4..e86b382 100644 >>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net >>>> /server/TcpSocketServer.java >>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net >>>> /server/TcpSocketServer.java >>>> > @@ -16,29 +16,25 @@ >>>> > */ >>>> > package org.apache.logging.log4j.core.net.server; >>>> > >>>> > -import java.io.BufferedReader; >>>> > import java.io.EOFException; >>>> > import java.io.IOException; >>>> > import java.io.InputStream; >>>> > -import java.io.InputStreamReader; >>>> > import java.io.ObjectInputStream; >>>> > import java.io.OptionalDataException; >>>> > import java.net.InetAddress; >>>> > import java.net.ServerSocket; >>>> > import java.net.Socket; >>>> > -import java.nio.charset.Charset; >>>> > 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.util.BasicCommandLineArguments; >>>> > import org.apache.logging.log4j.core.util.Log4jThread; >>>> > import org.apache.logging.log4j.message.EntryMessage; >>>> > >>>> > -import com.beust.jcommander.Parameter; >>>> > -import com.beust.jcommander.validators.PositiveInteger; >>>> > - >>>> > /** >>>> > * Listens for Log4j events on a TCP server socket and passes them on >>>> to Log4j. >>>> > * >>>> > @@ -194,20 +190,9 @@ public class TcpSocketServer<T extends >>>> InputStream> extends AbstractSocketServer >>>> > } >>>> > final TcpSocketServer<ObjectInputStream> socketServer = >>>> TcpSocketServer >>>> > .createSerializedSocketServer(cla.getPort(), >>>> cla.getBacklog(), cla.getLocalBindAddress()); >>>> > - final Thread serverThread = new Log4jThread(socketServer); >>>> > - serverThread.start(); >>>> > + final Thread serverThread = socketServer.startNewThread(); >>>> > if (cla.isInteractive()) { >>>> > - final Charset enc = Charset.defaultCharset(); >>>> > - final BufferedReader reader = new BufferedReader(new >>>> InputStreamReader(System.in, enc)); >>>> > - while (true) { >>>> > - final String line = reader.readLine(); >>>> > - if (line == null || line.equalsIgnoreCase("Quit") || >>>> line.equalsIgnoreCase("Stop") >>>> > - || line.equalsIgnoreCase("Exit")) { >>>> > - socketServer.shutdown(); >>>> > - serverThread.join(); >>>> > - break; >>>> > - } >>>> > - } >>>> > + socketServer.awaitTermination(serverThread); >>>> > } >>>> > } >>>> > >>>> > @@ -321,6 +306,7 @@ public class TcpSocketServer<T extends >>>> InputStream> extends AbstractSocketServer >>>> > * >>>> > * @throws IOException if the server socket could not be closed >>>> > */ >>>> > + @Override >>>> > public void shutdown() throws IOException { >>>> > final EntryMessage entry = logger.traceEntry(); >>>> > setActive(false); >>>> > >>>> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/5 >>>> bc69e29/log4j-core/src/main/java/org/apache/logging/log4j/co >>>> re/net/server/UdpSocketServer.java >>>> > ------------------------------------------------------------ >>>> ---------- >>>> > diff --git a/log4j-core/src/main/java/org >>>> /apache/logging/log4j/core/net/server/UdpSocketServer.java >>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/net >>>> /server/UdpSocketServer.java >>>> > index 427a365..ed04f69 100644 >>>> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net >>>> /server/UdpSocketServer.java >>>> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net >>>> /server/UdpSocketServer.java >>>> > @@ -16,12 +16,10 @@ >>>> > */ >>>> > package org.apache.logging.log4j.core.net.server; >>>> > >>>> > -import java.io.BufferedReader; >>>> > import java.io.ByteArrayInputStream; >>>> > import java.io.EOFException; >>>> > import java.io.IOException; >>>> > import java.io.InputStream; >>>> > -import java.io.InputStreamReader; >>>> > import java.io.ObjectInputStream; >>>> > import java.io.OptionalDataException; >>>> > import java.net.DatagramPacket; >>>> > @@ -29,7 +27,6 @@ import java.net.DatagramSocket; >>>> > >>>> > import org.apache.logging.log4j.core.config.ConfigurationFactory; >>>> > import org.apache.logging.log4j.core.util.BasicCommandLineArguments; >>>> > -import org.apache.logging.log4j.core.util.Log4jThread; >>>> > >>>> > /** >>>> > * Listens for Log4j events on a datagram socket and passes them on >>>> to Log4j. >>>> > @@ -97,19 +94,9 @@ public class UdpSocketServer<T extends >>>> InputStream> extends AbstractSocketServer >>>> > } >>>> > final UdpSocketServer<ObjectInputStream> socketServer = >>>> UdpSocketServer >>>> > .createSerializedSocketServer(cla.getPort()); >>>> > - final Thread serverThread = new Log4jThread(socketServer); >>>> > - serverThread.start(); >>>> > + final Thread serverThread = socketServer.startNewThread(); >>>> > if (cla.isInteractive()) { >>>> > - final BufferedReader reader = new BufferedReader(new >>>> InputStreamReader(System.in)); >>>> > - while (true) { >>>> > - final String line = reader.readLine(); >>>> > - if (line == null || line.equalsIgnoreCase("Quit") || >>>> line.equalsIgnoreCase("Stop") >>>> > - || line.equalsIgnoreCase("Exit")) { >>>> > - socketServer.shutdown(); >>>> > - serverThread.join(); >>>> > - break; >>>> > - } >>>> > - } >>>> > + socketServer.awaitTermination(serverThread); >>>> > } >>>> > } >>>> > >>>> > @@ -173,6 +160,7 @@ public class UdpSocketServer<T extends >>>> InputStream> extends AbstractSocketServer >>>> > /** >>>> > * Shutdown the server. >>>> > */ >>>> > + @Override >>>> > public void shutdown() { >>>> > this.setActive(false); >>>> > Thread.currentThread().interrupt(); >>>> > >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: log4j-dev-unsubscr...@logging.apache.org >>>> For additional commands, e-mail: log4j-dev-h...@logging.apache.org >>>> >>>> >>> >>> >>> -- >>> Matt Sicker <boa...@gmail.com> >>> >> >> >> >> -- >> E-Mail: garydgreg...@gmail.com | ggreg...@apache.org >> Java Persistence with Hibernate, Second Edition >> <https://www.amazon.com/gp/product/1617290459/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1617290459&linkCode=as2&tag=garygregory-20&linkId=cadb800f39946ec62ea2b1af9fe6a2b8> >> >> <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1617290459> >> JUnit in Action, Second Edition >> <https://www.amazon.com/gp/product/1935182021/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182021&linkCode=as2&tag=garygregory-20&linkId=31ecd1f6b6d1eaf8886ac902a24de418%22> >> >> <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1935182021> >> Spring Batch in Action >> <https://www.amazon.com/gp/product/1935182951/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182951&linkCode=%7B%7BlinkCode%7D%7D&tag=garygregory-20&linkId=%7B%7Blink_id%7D%7D%22%3ESpring+Batch+in+Action> >> <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1935182951> >> Blog: http://garygregory.wordpress.com >> Home: http://garygregory.com/ >> Tweet! http://twitter.com/GaryGregory >> > -- Matt Sicker <boa...@gmail.com>