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;
