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/
> f73f89b1/log4j-core/src/main/java/org/apache/logging/log4j/
> core/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.AppenderLoggingException;
> > -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.AppenderLoggingException;
> > +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/
> f73f89b1/log4j-core/src/main/java/org/apache/logging/log4j/
> core/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/
> util/NullOutputStream.java
> > index 9382f9d..846db3b 100644
> > --- 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/
> util/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/
> f73f89b1/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/
> RandomAccessFileManagerTest.java
> > ----------------------------------------------------------------------
> > diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/
> appender/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/appender/
> RandomAccessFileManagerTest.java
> > +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/
> 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_
> STREAM;
> > +            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_
> STREAM;
> > +            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_
> STREAM;
> > +            final OutputStream os = NullOutputStream.getInstance();
> >             final int bufferSize = 4 * 1024;
> >             assertNotEquals(bufferSize, RandomAccessFileManager.
> DEFAULT_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_
> STREAM;
> > +            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/
> f73f89b1/log4j-core/src/test/java/org/apache/logging/log4j/
> core/appender/rolling/RollingRandomAccessFileManagerTest.java
> > ----------------------------------------------------------------------
> > diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/
> appender/rolling/RollingRandomAccessFileManagerTest.java
> b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/
> RollingRandomAccessFileManagerTest.java
> > index c9486f0..eb8c095 100644
> > --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/
> appender/rolling/RollingRandomAccessFileManagerTest.java
> > +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/
> appender/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_
> STREAM;
> > +            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_
> STREAM;
> > +            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_
> STREAM;
> > +            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

Reply via email to