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