We can just convert everything to LF. Needs to be done on all active branches, though, or else we'll get crazy merge conflicts I think.
On 8 September 2016 at 02:15, Gary Gregory <garydgreg...@gmail.com> wrote: > Let's all agree to 'something' and have that 'something' tested. Then we > can add it to our site docs. > > Gary > > On Thu, Sep 8, 2016 at 12:10 AM, Remko Popma <remko.po...@gmail.com> > wrote: > >> Guys, would it be possible to do something about the commit mails showing >> all lines as changed? >> >> It seems that we need to take two steps: >> 1. Change Eclipse settings: http://stackoverflow.com/a/24337518/1446916 >> 2. Convert CRLF to unix LF in existing files. >> >> Apparently there's no need to configure.gitattributes or core.autocrlf >> >> There is no way to see what changed at the moment... >> >> Remko >> >> Sent from my iPhone >> >> > On 2016/09/08, at 12:54, ggreg...@apache.org wrote: >> > >> > Repository: logging-log4j2 >> > Updated Branches: >> > refs/heads/master d85a0589b -> f73f89b14 >> > >> > >> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/f >> 73f89b1/log4j-core/src/main/java/org/apache/logging/log4j/co >> re/net/TcpSocketManager.java >> > ---------------------------------------------------------------------- >> > diff --git >> > a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/TcpSocketManager.java >> b/log4j-core/src/main/java/org/apache/logging/log4j/core/net >> /TcpSocketManager.java >> > index 855b99a..444c250 100644 >> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net >> /TcpSocketManager.java >> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net >> /TcpSocketManager.java >> > @@ -1,327 +1,327 @@ >> > -/* >> > - * Licensed to the Apache Software Foundation (ASF) under one or more >> > - * contributor license agreements. See the NOTICE file distributed with >> > - * this work for additional information regarding copyright ownership. >> > - * The ASF licenses this file to You 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 org.apache.logging.log4j.core.net; >> > - >> > -import java.io.IOException; >> > -import java.io.OutputStream; >> > -import java.io.Serializable; >> > -import java.net.ConnectException; >> > -import java.net.InetAddress; >> > -import java.net.InetSocketAddress; >> > -import java.net.Socket; >> > -import java.net.UnknownHostException; >> > -import java.util.HashMap; >> > -import java.util.Map; >> > -import java.util.concurrent.CountDownLatch; >> > - >> > -import org.apache.logging.log4j.core.Layout; >> > -import org.apache.logging.log4j.core.appender.AppenderLoggingExcept >> ion; >> > -import org.apache.logging.log4j.core.appender.ManagerFactory; >> > -import org.apache.logging.log4j.core.appender.OutputStreamManager; >> > -import org.apache.logging.log4j.core.util.Log4jThread; >> > -import org.apache.logging.log4j.core.util.NullOutputStream; >> > -import org.apache.logging.log4j.util.Strings; >> > - >> > -/** >> > - * Manager of TCP Socket connections. >> > - */ >> > -public class TcpSocketManager extends AbstractSocketManager { >> > - /** >> > - The default reconnection delay (30000 milliseconds or 30 >> seconds). >> > - */ >> > - public static final int DEFAULT_RECONNECTION_DELAY_MILLIS = >> 30000; >> > - /** >> > - The default port number of remote logging server (4560). >> > - */ >> > - private static final int DEFAULT_PORT = 4560; >> > - >> > - private static final TcpSocketManagerFactory FACTORY = new >> TcpSocketManagerFactory(); >> > - >> > - private final int reconnectionDelay; >> > - >> > - private Reconnector reconnector; >> > - >> > - private Socket socket; >> > - >> > - private final boolean retry; >> > - >> > - private final boolean immediateFail; >> > - >> > - private final int connectTimeoutMillis; >> > - >> > - /** >> > - * The Constructor. >> > - * @param name The unique name of this connection. >> > - * @param os The OutputStream. >> > - * @param socket The Socket. >> > - * @param inetAddress The Internet address of the host. >> > - * @param host The name of the host. >> > - * @param port The port number on the host. >> > - * @param connectTimeoutMillis the connect timeout in milliseconds. >> > - * @param delay Reconnection interval. >> > - * @param immediateFail True if the write should fail if no socket >> is immediately available. >> > - * @param layout The Layout. >> > - * @param bufferSize The buffer size. >> > - */ >> > - public TcpSocketManager(final String name, final OutputStream os, >> final Socket socket, final InetAddress inetAddress, >> > - final String host, final int port, final >> int connectTimeoutMillis, final int delay, >> > - final boolean immediateFail, final >> Layout<? extends Serializable> layout, final int bufferSize) { >> > - super(name, os, inetAddress, host, port, layout, true, >> bufferSize); >> > - this.connectTimeoutMillis = connectTimeoutMillis; >> > - this.reconnectionDelay = delay; >> > - this.socket = socket; >> > - this.immediateFail = immediateFail; >> > - retry = delay > 0; >> > - if (socket == null) { >> > - reconnector = createReconnector(); >> > - reconnector.start(); >> > - } >> > - } >> > - >> > - /** >> > - * Obtain a TcpSocketManager. >> > - * @param host The host to connect to. >> > - * @param port The port on the host. >> > - * @param connectTimeoutMillis the connect timeout in milliseconds >> > - * @param reconnectDelayMillis The interval to pause between >> retries. >> > - * @param bufferSize The buffer size. >> > - * @return A TcpSocketManager. >> > - */ >> > - public static TcpSocketManager getSocketManager(final String host, >> int port, final int connectTimeoutMillis, >> > - int reconnectDelayMillis, final boolean immediateFail, >> final Layout<? extends Serializable> layout, final int bufferSize) { >> > - if (Strings.isEmpty(host)) { >> > - throw new IllegalArgumentException("A host name is >> required"); >> > - } >> > - if (port <= 0) { >> > - port = DEFAULT_PORT; >> > - } >> > - if (reconnectDelayMillis == 0) { >> > - reconnectDelayMillis = DEFAULT_RECONNECTION_DELAY_MILLIS; >> > - } >> > - return (TcpSocketManager) getManager("TCP:" + host + ':' + >> port, new FactoryData( >> > - host, port, connectTimeoutMillis, >> reconnectDelayMillis, immediateFail, layout, bufferSize), FACTORY); >> > - } >> > - >> > - @Override >> > - protected void write(final byte[] bytes, final int offset, final >> int length, final boolean immediateFlush) { >> > - if (socket == null) { >> > - if (reconnector != null && !immediateFail) { >> > - reconnector.latch(); >> > - } >> > - if (socket == null) { >> > - final String msg = "Error writing to " + getName() + " >> socket not available"; >> > - throw new AppenderLoggingException(msg); >> > - } >> > - } >> > - synchronized (this) { >> > - try { >> > - final OutputStream outputStream = getOutputStream(); >> > - outputStream.write(bytes, offset, length); >> > - if (immediateFlush) { >> > - outputStream.flush(); >> > - } >> > - } catch (final IOException ex) { >> > - if (retry && reconnector == null) { >> > - reconnector = createReconnector(); >> > - reconnector.start(); >> > - } >> > - final String msg = "Error writing to " + getName(); >> > - throw new AppenderLoggingException(msg, ex); >> > - } >> > - } >> > - } >> > - >> > - @Override >> > - protected synchronized boolean closeOutputStream() { >> > - boolean closed = super.closeOutputStream(); >> > - if (reconnector != null) { >> > - reconnector.shutdown(); >> > - reconnector.interrupt(); >> > - reconnector = null; >> > - } >> > - final Socket oldSocket = socket; >> > - socket = null; >> > - if (oldSocket != null) { >> > - try { >> > - oldSocket.close(); >> > - } catch (final IOException e) { >> > - LOGGER.error("Could not close socket {}", socket); >> > - return false; >> > - } >> > - } >> > - return closed; >> > - } >> > - >> > - public int getConnectTimeoutMillis() { >> > - return connectTimeoutMillis; >> > - } >> > - >> > - /** >> > - * Gets this TcpSocketManager's content format. Specified by: >> > - * <ul> >> > - * <li>Key: "protocol" Value: "tcp"</li> >> > - * <li>Key: "direction" Value: "out"</li> >> > - * </ul> >> > - * >> > - * @return Map of content format keys supporting TcpSocketManager >> > - */ >> > - @Override >> > - public Map<String, String> getContentFormat() { >> > - final Map<String, String> result = new >> HashMap<>(super.getContentFormat()); >> > - result.put("protocol", "tcp"); >> > - result.put("direction", "out"); >> > - return result; >> > - } >> > - >> > - /** >> > - * Handles reconnecting to a Thread. >> > - */ >> > - private class Reconnector extends Log4jThread { >> > - >> > - private final CountDownLatch latch = new CountDownLatch(1); >> > - >> > - private boolean shutdown = false; >> > - >> > - private final Object owner; >> > - >> > - public Reconnector(final OutputStreamManager owner) { >> > - super("TcpSocketManager-Reconnector"); >> > - this.owner = owner; >> > - } >> > - >> > - public void latch() { >> > - try { >> > - latch.await(); >> > - } catch (final InterruptedException ex) { >> > - // Ignore the exception. >> > - } >> > - } >> > - >> > - public void shutdown() { >> > - shutdown = true; >> > - } >> > - >> > - @Override >> > - public void run() { >> > - while (!shutdown) { >> > - try { >> > - sleep(reconnectionDelay); >> > - final Socket sock = createSocket(inetAddress, >> port); >> > - final OutputStream newOS = sock.getOutputStream(); >> > - synchronized (owner) { >> > - try { >> > - getOutputStream().close(); >> > - } catch (final IOException ioe) { >> > - // Ignore this. >> > - } >> > - >> > - setOutputStream(newOS); >> > - socket = sock; >> > - reconnector = null; >> > - shutdown = true; >> > - } >> > - LOGGER.debug("Connection to " + host + ':' + port >> + " reestablished."); >> > - } catch (final InterruptedException ie) { >> > - LOGGER.debug("Reconnection interrupted."); >> > - } catch (final ConnectException ex) { >> > - LOGGER.debug(host + ':' + port + " refused >> connection"); >> > - } catch (final IOException ioe) { >> > - LOGGER.debug("Unable to reconnect to " + host + >> ':' + port); >> > - } finally { >> > - latch.countDown(); >> > - } >> > - } >> > - } >> > - } >> > - >> > - private Reconnector createReconnector() { >> > - final Reconnector recon = new Reconnector(this); >> > - recon.setDaemon(true); >> > - recon.setPriority(Thread.MIN_PRIORITY); >> > - return recon; >> > - } >> > - >> > - protected Socket createSocket(final InetAddress host, final int >> port) throws IOException { >> > - return createSocket(host.getHostName(), port); >> > - } >> > - >> > - protected Socket createSocket(final String host, final int port) >> throws IOException { >> > - final InetSocketAddress address = new InetSocketAddress(host, >> port); >> > - final Socket newSocket = new Socket(); >> > - newSocket.connect(address, connectTimeoutMillis); >> > - return newSocket; >> > - } >> > - >> > - /** >> > - * Data for the factory. >> > - */ >> > - private static class FactoryData { >> > - private final String host; >> > - private final int port; >> > - private final int connectTimeoutMillis; >> > - private final int reconnectDelayMillis; >> > - private final boolean immediateFail; >> > - private final Layout<? extends Serializable> layout; >> > - private final int bufferSize; >> > - >> > - public FactoryData(final String host, final int port, final >> int connectTimeoutMillis, final int reconnectDelayMillis, >> > - final boolean immediateFail, final Layout<? >> extends Serializable> layout, final int bufferSize) { >> > - this.host = host; >> > - this.port = port; >> > - this.connectTimeoutMillis = connectTimeoutMillis; >> > - this.reconnectDelayMillis = reconnectDelayMillis; >> > - this.immediateFail = immediateFail; >> > - this.layout = layout; >> > - this.bufferSize = bufferSize; >> > - } >> > - } >> > - >> > - /** >> > - * Factory to create a TcpSocketManager. >> > - */ >> > - protected static class TcpSocketManagerFactory implements >> ManagerFactory<TcpSocketManager, FactoryData> { >> > - @Override >> > - public TcpSocketManager createManager(final String name, final >> FactoryData data) { >> > - >> > - InetAddress inetAddress; >> > - OutputStream os; >> > - try { >> > - inetAddress = InetAddress.getByName(data.host); >> > - } catch (final UnknownHostException ex) { >> > - LOGGER.error("Could not find address of " + data.host, >> ex, ex); >> > - return null; >> > - } >> > - try { >> > - // LOG4J2-1042 >> > - final Socket socket = new Socket(); >> > - socket.connect(new InetSocketAddress(data.host, >> data.port), data.connectTimeoutMillis); >> > - os = socket.getOutputStream(); >> > - return new TcpSocketManager(name, os, socket, >> inetAddress, data.host, data.port, >> > - data.connectTimeoutMillis, >> data.reconnectDelayMillis, data.immediateFail, data.layout, >> data.bufferSize); >> > - } catch (final IOException ex) { >> > - LOGGER.error("TcpSocketManager (" + name + ") " + ex, >> ex); >> > - os = NullOutputStream.NULL_OUTPUT_STREAM; >> > - } >> > - if (data.reconnectDelayMillis == 0) { >> > - return null; >> > - } >> > - return new TcpSocketManager(name, os, null, inetAddress, >> data.host, data.port, data.connectTimeoutMillis, >> > - data.reconnectDelayMillis, data.immediateFail, >> data.layout, data.bufferSize); >> > - } >> > - } >> > - >> > -} >> > +/* >> > + * Licensed to the Apache Software Foundation (ASF) under one or more >> > + * contributor license agreements. See the NOTICE file distributed with >> > + * this work for additional information regarding copyright ownership. >> > + * The ASF licenses this file to You 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 org.apache.logging.log4j.core.net; >> > + >> > +import java.io.IOException; >> > +import java.io.OutputStream; >> > +import java.io.Serializable; >> > +import java.net.ConnectException; >> > +import java.net.InetAddress; >> > +import java.net.InetSocketAddress; >> > +import java.net.Socket; >> > +import java.net.UnknownHostException; >> > +import java.util.HashMap; >> > +import java.util.Map; >> > +import java.util.concurrent.CountDownLatch; >> > + >> > +import org.apache.logging.log4j.core.Layout; >> > +import org.apache.logging.log4j.core.appender.AppenderLoggingExcept >> ion; >> > +import org.apache.logging.log4j.core.appender.ManagerFactory; >> > +import org.apache.logging.log4j.core.appender.OutputStreamManager; >> > +import org.apache.logging.log4j.core.util.Log4jThread; >> > +import org.apache.logging.log4j.core.util.NullOutputStream; >> > +import org.apache.logging.log4j.util.Strings; >> > + >> > +/** >> > + * Manager of TCP Socket connections. >> > + */ >> > +public class TcpSocketManager extends AbstractSocketManager { >> > + /** >> > + The default reconnection delay (30000 milliseconds or 30 >> seconds). >> > + */ >> > + public static final int DEFAULT_RECONNECTION_DELAY_MILLIS = >> 30000; >> > + /** >> > + The default port number of remote logging server (4560). >> > + */ >> > + private static final int DEFAULT_PORT = 4560; >> > + >> > + private static final TcpSocketManagerFactory FACTORY = new >> TcpSocketManagerFactory(); >> > + >> > + private final int reconnectionDelay; >> > + >> > + private Reconnector reconnector; >> > + >> > + private Socket socket; >> > + >> > + private final boolean retry; >> > + >> > + private final boolean immediateFail; >> > + >> > + private final int connectTimeoutMillis; >> > + >> > + /** >> > + * The Constructor. >> > + * @param name The unique name of this connection. >> > + * @param os The OutputStream. >> > + * @param socket The Socket. >> > + * @param inetAddress The Internet address of the host. >> > + * @param host The name of the host. >> > + * @param port The port number on the host. >> > + * @param connectTimeoutMillis the connect timeout in milliseconds. >> > + * @param delay Reconnection interval. >> > + * @param immediateFail True if the write should fail if no socket >> is immediately available. >> > + * @param layout The Layout. >> > + * @param bufferSize The buffer size. >> > + */ >> > + public TcpSocketManager(final String name, final OutputStream os, >> final Socket socket, final InetAddress inetAddress, >> > + final String host, final int port, final >> int connectTimeoutMillis, final int delay, >> > + final boolean immediateFail, final >> Layout<? extends Serializable> layout, final int bufferSize) { >> > + super(name, os, inetAddress, host, port, layout, true, >> bufferSize); >> > + this.connectTimeoutMillis = connectTimeoutMillis; >> > + this.reconnectionDelay = delay; >> > + this.socket = socket; >> > + this.immediateFail = immediateFail; >> > + retry = delay > 0; >> > + if (socket == null) { >> > + reconnector = createReconnector(); >> > + reconnector.start(); >> > + } >> > + } >> > + >> > + /** >> > + * Obtain a TcpSocketManager. >> > + * @param host The host to connect to. >> > + * @param port The port on the host. >> > + * @param connectTimeoutMillis the connect timeout in milliseconds >> > + * @param reconnectDelayMillis The interval to pause between >> retries. >> > + * @param bufferSize The buffer size. >> > + * @return A TcpSocketManager. >> > + */ >> > + public static TcpSocketManager getSocketManager(final String host, >> int port, final int connectTimeoutMillis, >> > + int reconnectDelayMillis, final boolean immediateFail, >> final Layout<? extends Serializable> layout, final int bufferSize) { >> > + if (Strings.isEmpty(host)) { >> > + throw new IllegalArgumentException("A host name is >> required"); >> > + } >> > + if (port <= 0) { >> > + port = DEFAULT_PORT; >> > + } >> > + if (reconnectDelayMillis == 0) { >> > + reconnectDelayMillis = DEFAULT_RECONNECTION_DELAY_MILLIS; >> > + } >> > + return (TcpSocketManager) getManager("TCP:" + host + ':' + >> port, new FactoryData( >> > + host, port, connectTimeoutMillis, >> reconnectDelayMillis, immediateFail, layout, bufferSize), FACTORY); >> > + } >> > + >> > + @Override >> > + protected void write(final byte[] bytes, final int offset, final >> int length, final boolean immediateFlush) { >> > + if (socket == null) { >> > + if (reconnector != null && !immediateFail) { >> > + reconnector.latch(); >> > + } >> > + if (socket == null) { >> > + final String msg = "Error writing to " + getName() + " >> socket not available"; >> > + throw new AppenderLoggingException(msg); >> > + } >> > + } >> > + synchronized (this) { >> > + try { >> > + final OutputStream outputStream = getOutputStream(); >> > + outputStream.write(bytes, offset, length); >> > + if (immediateFlush) { >> > + outputStream.flush(); >> > + } >> > + } catch (final IOException ex) { >> > + if (retry && reconnector == null) { >> > + reconnector = createReconnector(); >> > + reconnector.start(); >> > + } >> > + final String msg = "Error writing to " + getName(); >> > + throw new AppenderLoggingException(msg, ex); >> > + } >> > + } >> > + } >> > + >> > + @Override >> > + protected synchronized boolean closeOutputStream() { >> > + boolean closed = super.closeOutputStream(); >> > + if (reconnector != null) { >> > + reconnector.shutdown(); >> > + reconnector.interrupt(); >> > + reconnector = null; >> > + } >> > + final Socket oldSocket = socket; >> > + socket = null; >> > + if (oldSocket != null) { >> > + try { >> > + oldSocket.close(); >> > + } catch (final IOException e) { >> > + LOGGER.error("Could not close socket {}", socket); >> > + return false; >> > + } >> > + } >> > + return closed; >> > + } >> > + >> > + public int getConnectTimeoutMillis() { >> > + return connectTimeoutMillis; >> > + } >> > + >> > + /** >> > + * Gets this TcpSocketManager's content format. Specified by: >> > + * <ul> >> > + * <li>Key: "protocol" Value: "tcp"</li> >> > + * <li>Key: "direction" Value: "out"</li> >> > + * </ul> >> > + * >> > + * @return Map of content format keys supporting TcpSocketManager >> > + */ >> > + @Override >> > + public Map<String, String> getContentFormat() { >> > + final Map<String, String> result = new >> HashMap<>(super.getContentFormat()); >> > + result.put("protocol", "tcp"); >> > + result.put("direction", "out"); >> > + return result; >> > + } >> > + >> > + /** >> > + * Handles reconnecting to a Thread. >> > + */ >> > + private class Reconnector extends Log4jThread { >> > + >> > + private final CountDownLatch latch = new CountDownLatch(1); >> > + >> > + private boolean shutdown = false; >> > + >> > + private final Object owner; >> > + >> > + public Reconnector(final OutputStreamManager owner) { >> > + super("TcpSocketManager-Reconnector"); >> > + this.owner = owner; >> > + } >> > + >> > + public void latch() { >> > + try { >> > + latch.await(); >> > + } catch (final InterruptedException ex) { >> > + // Ignore the exception. >> > + } >> > + } >> > + >> > + public void shutdown() { >> > + shutdown = true; >> > + } >> > + >> > + @Override >> > + public void run() { >> > + while (!shutdown) { >> > + try { >> > + sleep(reconnectionDelay); >> > + final Socket sock = createSocket(inetAddress, >> port); >> > + final OutputStream newOS = sock.getOutputStream(); >> > + synchronized (owner) { >> > + try { >> > + getOutputStream().close(); >> > + } catch (final IOException ioe) { >> > + // Ignore this. >> > + } >> > + >> > + setOutputStream(newOS); >> > + socket = sock; >> > + reconnector = null; >> > + shutdown = true; >> > + } >> > + LOGGER.debug("Connection to " + host + ':' + port >> + " reestablished."); >> > + } catch (final InterruptedException ie) { >> > + LOGGER.debug("Reconnection interrupted."); >> > + } catch (final ConnectException ex) { >> > + LOGGER.debug(host + ':' + port + " refused >> connection"); >> > + } catch (final IOException ioe) { >> > + LOGGER.debug("Unable to reconnect to " + host + >> ':' + port); >> > + } finally { >> > + latch.countDown(); >> > + } >> > + } >> > + } >> > + } >> > + >> > + private Reconnector createReconnector() { >> > + final Reconnector recon = new Reconnector(this); >> > + recon.setDaemon(true); >> > + recon.setPriority(Thread.MIN_PRIORITY); >> > + return recon; >> > + } >> > + >> > + protected Socket createSocket(final InetAddress host, final int >> port) throws IOException { >> > + return createSocket(host.getHostName(), port); >> > + } >> > + >> > + protected Socket createSocket(final String host, final int port) >> throws IOException { >> > + final InetSocketAddress address = new InetSocketAddress(host, >> port); >> > + final Socket newSocket = new Socket(); >> > + newSocket.connect(address, connectTimeoutMillis); >> > + return newSocket; >> > + } >> > + >> > + /** >> > + * Data for the factory. >> > + */ >> > + private static class FactoryData { >> > + private final String host; >> > + private final int port; >> > + private final int connectTimeoutMillis; >> > + private final int reconnectDelayMillis; >> > + private final boolean immediateFail; >> > + private final Layout<? extends Serializable> layout; >> > + private final int bufferSize; >> > + >> > + public FactoryData(final String host, final int port, final >> int connectTimeoutMillis, final int reconnectDelayMillis, >> > + final boolean immediateFail, final Layout<? >> extends Serializable> layout, final int bufferSize) { >> > + this.host = host; >> > + this.port = port; >> > + this.connectTimeoutMillis = connectTimeoutMillis; >> > + this.reconnectDelayMillis = reconnectDelayMillis; >> > + this.immediateFail = immediateFail; >> > + this.layout = layout; >> > + this.bufferSize = bufferSize; >> > + } >> > + } >> > + >> > + /** >> > + * Factory to create a TcpSocketManager. >> > + */ >> > + protected static class TcpSocketManagerFactory implements >> ManagerFactory<TcpSocketManager, FactoryData> { >> > + @Override >> > + public TcpSocketManager createManager(final String name, final >> FactoryData data) { >> > + >> > + InetAddress inetAddress; >> > + OutputStream os; >> > + try { >> > + inetAddress = InetAddress.getByName(data.host); >> > + } catch (final UnknownHostException ex) { >> > + LOGGER.error("Could not find address of " + data.host, >> ex, ex); >> > + return null; >> > + } >> > + try { >> > + // LOG4J2-1042 >> > + final Socket socket = new Socket(); >> > + socket.connect(new InetSocketAddress(data.host, >> data.port), data.connectTimeoutMillis); >> > + os = socket.getOutputStream(); >> > + return new TcpSocketManager(name, os, socket, >> inetAddress, data.host, data.port, >> > + data.connectTimeoutMillis, >> data.reconnectDelayMillis, data.immediateFail, data.layout, >> data.bufferSize); >> > + } catch (final IOException ex) { >> > + LOGGER.error("TcpSocketManager (" + name + ") " + ex, >> ex); >> > + os = NullOutputStream.getInstance(); >> > + } >> > + if (data.reconnectDelayMillis == 0) { >> > + return null; >> > + } >> > + return new TcpSocketManager(name, os, null, inetAddress, >> data.host, data.port, data.connectTimeoutMillis, >> > + data.reconnectDelayMillis, data.immediateFail, >> data.layout, data.bufferSize); >> > + } >> > + } >> > + >> > +} >> > >> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/f >> 73f89b1/log4j-core/src/main/java/org/apache/logging/log4j/co >> re/util/NullOutputStream.java >> > ---------------------------------------------------------------------- >> > diff --git >> > a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/NullOutputStream.java >> b/log4j-core/src/main/java/org/apache/logging/log4j/core/uti >> l/NullOutputStream.java >> > index 9382f9d..846db3b 100644 >> > --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/uti >> l/NullOutputStream.java >> > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/uti >> l/NullOutputStream.java >> > @@ -31,11 +31,18 @@ import java.io.OutputStream; >> > */ >> > public class NullOutputStream extends OutputStream { >> > >> > + private static final NullOutputStream INSTANCE = new >> NullOutputStream(); >> > + >> > /** >> > - * A singleton. >> > + * @deprecated Use {@link #getInstance()}. >> > */ >> > + @Deprecated >> > public static final NullOutputStream NULL_OUTPUT_STREAM = new >> NullOutputStream(); >> > >> > + public static NullOutputStream getInstance() { >> > + return INSTANCE; >> > + } >> > + >> > private NullOutputStream() { >> > // do nothing >> > } >> > >> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/f >> 73f89b1/log4j-core/src/test/java/org/apache/logging/log4j/co >> re/appender/RandomAccessFileManagerTest.java >> > ---------------------------------------------------------------------- >> > diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/app >> ender/RandomAccessFileManagerTest.java b/log4j-core/src/test/java/org >> /apache/logging/log4j/core/appender/RandomAccessFileManagerTest.java >> > index fb84266..3cbaa68 100644 >> > --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/app >> ender/RandomAccessFileManagerTest.java >> > +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/app >> ender/RandomAccessFileManagerTest.java >> > @@ -46,7 +46,7 @@ public class RandomAccessFileManagerTest { >> > public void testWrite_multiplesOfBufferSize() throws IOException { >> > final File file = folder.newFile(); >> > try (final RandomAccessFile raf = new RandomAccessFile(file, >> "rw")) { >> > - final OutputStream os = NullOutputStream.NULL_OUTPUT_S >> TREAM; >> > + final OutputStream os = NullOutputStream.getInstance(); >> > final RandomAccessFileManager manager = new >> RandomAccessFileManager(null, raf, file.getName(), >> > os, RandomAccessFileManager.DEFAULT_BUFFER_SIZE, >> null, null, true); >> > >> > @@ -67,7 +67,7 @@ public class RandomAccessFileManagerTest { >> > public void testWrite_dataExceedingBufferSize() throws IOException >> { >> > final File file = folder.newFile(); >> > try (final RandomAccessFile raf = new RandomAccessFile(file, >> "rw")) { >> > - final OutputStream os = NullOutputStream.NULL_OUTPUT_S >> TREAM; >> > + final OutputStream os = NullOutputStream.getInstance(); >> > final RandomAccessFileManager manager = new >> RandomAccessFileManager(null, raf, file.getName(), >> > os, RandomAccessFileManager.DEFAULT_BUFFER_SIZE, >> null, null, true); >> > >> > @@ -85,7 +85,7 @@ public class RandomAccessFileManagerTest { >> > public void testConfigurableBufferSize() throws IOException { >> > final File file = folder.newFile(); >> > try (final RandomAccessFile raf = new RandomAccessFile(file, >> "rw")) { >> > - final OutputStream os = NullOutputStream.NULL_OUTPUT_S >> TREAM; >> > + final OutputStream os = NullOutputStream.getInstance(); >> > final int bufferSize = 4 * 1024; >> > assertNotEquals(bufferSize, RandomAccessFileManager.DEFAUL >> T_BUFFER_SIZE); >> > >> > @@ -100,7 +100,7 @@ public class RandomAccessFileManagerTest { >> > public void testWrite_dataExceedingMinBufferSize() throws >> IOException { >> > final File file = folder.newFile(); >> > try (final RandomAccessFile raf = new RandomAccessFile(file, >> "rw")) { >> > - final OutputStream os = NullOutputStream.NULL_OUTPUT_S >> TREAM; >> > + final OutputStream os = NullOutputStream.getInstance(); >> > final int bufferSize = 1; >> > final RandomAccessFileManager manager = new >> RandomAccessFileManager(null, raf, file.getName(), >> > os, bufferSize, null, null, true); >> > >> > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/f >> 73f89b1/log4j-core/src/test/java/org/apache/logging/log4j/co >> re/appender/rolling/RollingRandomAccessFileManagerTest.java >> > ---------------------------------------------------------------------- >> > diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/app >> ender/rolling/RollingRandomAccessFileManagerTest.java >> b/log4j-core/src/test/java/org/apache/logging/log4j/core/app >> ender/rolling/RollingRandomAccessFileManagerTest.java >> > index c9486f0..eb8c095 100644 >> > --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/app >> ender/rolling/RollingRandomAccessFileManagerTest.java >> > +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/app >> ender/rolling/RollingRandomAccessFileManagerTest.java >> > @@ -51,7 +51,7 @@ public class RollingRandomAccessFileManagerTest { >> > final File file = File.createTempFile("log4j2", "test"); >> > file.deleteOnExit(); >> > try (final RandomAccessFile raf = new RandomAccessFile(file, >> "rw")) { >> > - final OutputStream os = NullOutputStream.NULL_OUTPUT_S >> TREAM; >> > + final OutputStream os = NullOutputStream.getInstance(); >> > final boolean append = false; >> > final boolean flushNow = false; >> > final long triggerSize = Long.MAX_VALUE; >> > @@ -80,7 +80,7 @@ public class RollingRandomAccessFileManagerTest { >> > final File file = File.createTempFile("log4j2", "test"); >> > file.deleteOnExit(); >> > try (final RandomAccessFile raf = new RandomAccessFile(file, >> "rw")) { >> > - final OutputStream os = NullOutputStream.NULL_OUTPUT_S >> TREAM; >> > + final OutputStream os = NullOutputStream.getInstance(); >> > final boolean append = false; >> > final boolean flushNow = false; >> > final long triggerSize = 0; >> > @@ -106,7 +106,7 @@ public class RollingRandomAccessFileManagerTest { >> > final File file = File.createTempFile("log4j2", "test"); >> > file.deleteOnExit(); >> > try (final RandomAccessFile raf = new RandomAccessFile(file, >> "rw")) { >> > - final OutputStream os = NullOutputStream.NULL_OUTPUT_S >> TREAM; >> > + final OutputStream os = NullOutputStream.getInstance(); >> > final boolean append = false; >> > final boolean flushNow = false; >> > final long triggerSize = 0; >> > >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: log4j-dev-unsubscr...@logging.apache.org >> For additional commands, e-mail: log4j-dev-h...@logging.apache.org >> >> > > > -- > E-Mail: garydgreg...@gmail.com | ggreg...@apache.org > Java Persistence with Hibernate, Second Edition > <http://www.manning.com/bauer3/> > JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> > Spring Batch in Action <http://www.manning.com/templier/> > Blog: http://garygregory.wordpress.com > Home: http://garygregory.com/ > Tweet! http://twitter.com/GaryGregory > -- Matt Sicker <boa...@gmail.com>