This is an automated email from the ASF dual-hosted git repository. mattsicker pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit bcc91d979bd0f2a6347595c8a2d6c6182b9b0727 Author: Matt Sicker <[email protected]> AuthorDate: Sun Oct 15 19:43:09 2023 -0500 Replace NullOutputStream with OutputStream::nullOutputStream Signed-off-by: Matt Sicker <[email protected]> --- .../SecureSocketAppenderSocketOptionsTest.java | 4 +- .../appender/SocketAppenderSocketOptionsTest.java | 9 ++- .../core/appender/RandomAccessFileManagerTest.java | 12 +-- .../RollingRandomAccessFileManagerTest.java | 7 +- .../core/appender/MemoryMappedFileManager.java | 3 +- .../log4j/core/appender/OutputStreamAppender.java | 3 +- .../core/appender/RandomAccessFileManager.java | 3 +- .../rolling/RollingRandomAccessFileManager.java | 3 +- .../logging/log4j/core/net/TcpSocketManager.java | 9 +-- .../logging/log4j/core/util/NullOutputStream.java | 86 ---------------------- 10 files changed, 25 insertions(+), 114 deletions(-) diff --git a/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/SecureSocketAppenderSocketOptionsTest.java b/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/SecureSocketAppenderSocketOptionsTest.java index bf584bb94a..3196e0738b 100644 --- a/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/SecureSocketAppenderSocketOptionsTest.java +++ b/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/SecureSocketAppenderSocketOptionsTest.java @@ -33,7 +33,6 @@ import org.apache.logging.log4j.core.net.ssl.TrustStoreConfiguration; import org.apache.logging.log4j.core.test.AvailablePortFinder; import org.apache.logging.log4j.core.test.junit.LoggerContextRule; import org.apache.logging.log4j.core.test.net.ssl.TestConstants; -import org.apache.logging.log4j.core.util.NullOutputStream; import org.junit.AfterClass; import org.junit.Assert; import org.junit.Assume; @@ -101,7 +100,8 @@ public class SecureSocketAppenderSocketOptionsTest { final TcpSocketManager manager = (TcpSocketManager) appender.getManager(); Assert.assertNotNull(manager); final OutputStream outputStream = manager.getOutputStream(); - Assert.assertFalse(outputStream instanceof NullOutputStream); + final OutputStream nullOutputStream = OutputStream.nullOutputStream(); + Assert.assertFalse(outputStream.getClass() == nullOutputStream.getClass()); final SocketOptions socketOptions = manager.getSocketOptions(); Assert.assertNotNull(socketOptions); final Socket socket = manager.getSocket(); diff --git a/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderSocketOptionsTest.java b/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderSocketOptionsTest.java index 365d8ad89c..b7c0f48ac9 100644 --- a/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderSocketOptionsTest.java +++ b/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderSocketOptionsTest.java @@ -17,6 +17,7 @@ package org.apache.logging.log4j.core.appender; import java.io.IOException; +import java.io.OutputStream; import java.net.Socket; import org.apache.logging.log4j.core.appender.SocketAppenderTest.TcpSocketTestServer; @@ -26,14 +27,15 @@ import org.apache.logging.log4j.core.net.SocketOptions; import org.apache.logging.log4j.core.net.TcpSocketManager; import org.apache.logging.log4j.core.test.junit.AllocatePorts; import org.apache.logging.log4j.core.test.junit.LoggerContextSource; -import org.apache.logging.log4j.core.util.NullOutputStream; import org.apache.logging.log4j.plugins.Named; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; @AllocatePorts("SocketAppenderSocketOptionsTest.port") public class SocketAppenderSocketOptionsTest { @@ -63,9 +65,10 @@ public class SocketAppenderSocketOptionsTest { .isNotNull() .isInstanceOf(TcpSocketManager.class); final TcpSocketManager manager = (TcpSocketManager) abstractSocketManager; + final Class<? extends OutputStream> nullOutputStreamType = OutputStream.nullOutputStream().getClass(); assertThat(manager.getOutputStream()) .isNotNull() - .isInstanceOf(NullOutputStream.class); + .isInstanceOf(nullOutputStreamType); final SocketOptions socketOptions = manager.getSocketOptions(); assertNotNull(socketOptions); final Socket socket = manager.getSocket(); diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/RandomAccessFileManagerTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/RandomAccessFileManagerTest.java index 55069fae37..b0e848f2a6 100644 --- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/RandomAccessFileManagerTest.java +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/RandomAccessFileManagerTest.java @@ -22,11 +22,11 @@ import java.io.IOException; import java.io.OutputStream; import java.io.RandomAccessFile; -import org.apache.logging.log4j.core.util.NullOutputStream; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; /** * Tests the RandomAccessFileManager class. @@ -44,7 +44,7 @@ public class RandomAccessFileManagerTest { public void testWrite_multiplesOfBufferSize() throws IOException { final File file = new File(tempDir, "testWrite_multiplesOfBufferSize.bin"); try (final RandomAccessFile raf = new RandomAccessFile(file, "rw")) { - final OutputStream os = NullOutputStream.getInstance(); + final OutputStream os = OutputStream.nullOutputStream(); try (final RandomAccessFileManager manager = new RandomAccessFileManager( null, raf, file.getName(), os, RandomAccessFileManager.DEFAULT_BUFFER_SIZE, null, null, true)) { @@ -66,7 +66,7 @@ public class RandomAccessFileManagerTest { public void testWrite_dataExceedingBufferSize() throws IOException { final File file = new File(tempDir, "testWrite_dataExceedingBufferSize.bin"); try (final RandomAccessFile raf = new RandomAccessFile(file, "rw")) { - final OutputStream os = NullOutputStream.getInstance(); + final OutputStream os = OutputStream.nullOutputStream(); final int size = RandomAccessFileManager.DEFAULT_BUFFER_SIZE * 3 + 1; try (final RandomAccessFileManager manager = new RandomAccessFileManager( null, raf, file.getName(), os, @@ -84,7 +84,7 @@ public class RandomAccessFileManagerTest { public void testConfigurableBufferSize() throws IOException { final File file = new File(tempDir, "testConfigurableBufferSize.bin"); try (final RandomAccessFile raf = new RandomAccessFile(file, "rw")) { - final OutputStream os = NullOutputStream.getInstance(); + final OutputStream os = OutputStream.nullOutputStream(); final int bufferSize = 4 * 1024; assertNotEquals(bufferSize, RandomAccessFileManager.DEFAULT_BUFFER_SIZE); try (final RandomAccessFileManager manager = new RandomAccessFileManager( @@ -99,7 +99,7 @@ public class RandomAccessFileManagerTest { public void testWrite_dataExceedingMinBufferSize() throws IOException { final File file = new File(tempDir, "testWrite_dataExceedingMinBufferSize.bin"); try (final RandomAccessFile raf = new RandomAccessFile(file, "rw")) { - final OutputStream os = NullOutputStream.getInstance(); + final OutputStream os = OutputStream.nullOutputStream(); final int bufferSize = 1; final int size = bufferSize * 3 + 1; try (final RandomAccessFileManager manager = new RandomAccessFileManager( diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManagerTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManagerTest.java index 775f23146b..6baeda0f1d 100644 --- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManagerTest.java +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManagerTest.java @@ -32,7 +32,6 @@ import java.util.concurrent.locks.LockSupport; import org.apache.logging.log4j.core.config.DefaultConfiguration; import org.apache.logging.log4j.core.util.Closer; import org.apache.logging.log4j.core.util.FileUtils; -import org.apache.logging.log4j.core.util.NullOutputStream; import org.apache.logging.log4j.util.Strings; import org.junit.Test; @@ -62,7 +61,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.getInstance(); + final OutputStream os = OutputStream.nullOutputStream(); final boolean append = false; final boolean flushNow = false; final long triggerSize = Long.MAX_VALUE; @@ -92,7 +91,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.getInstance(); + final OutputStream os = OutputStream.nullOutputStream(); final boolean append = false; final boolean flushNow = false; final long triggerSize = 0; @@ -119,7 +118,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.getInstance(); + final OutputStream os = OutputStream.nullOutputStream(); final boolean append = false; final boolean flushNow = false; final long triggerSize = 0; diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManager.java index 246aba78ce..592cd7f387 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManager.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManager.java @@ -35,7 +35,6 @@ import java.util.Objects; import org.apache.logging.log4j.core.Layout; import org.apache.logging.log4j.core.util.Closer; import org.apache.logging.log4j.core.util.FileUtils; -import org.apache.logging.log4j.core.util.NullOutputStream; import org.apache.logging.log4j.util.ReflectionUtil; //Lines too long... @@ -365,7 +364,7 @@ public class MemoryMappedFileManager extends OutputStreamManager { } final boolean writeHeader = !data.append || !file.exists(); - final OutputStream os = NullOutputStream.getInstance(); + final OutputStream os = OutputStream.nullOutputStream(); RandomAccessFile raf = null; try { FileUtils.makeParentDirs(file); diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamAppender.java index d4e3f84e88..9396adafad 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamAppender.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamAppender.java @@ -24,7 +24,6 @@ import org.apache.logging.log4j.core.Layout; import org.apache.logging.log4j.core.config.Property; import org.apache.logging.log4j.core.layout.PatternLayout; import org.apache.logging.log4j.core.util.CloseShieldOutputStream; -import org.apache.logging.log4j.core.util.NullOutputStream; import org.apache.logging.log4j.plugins.Configurable; import org.apache.logging.log4j.plugins.Plugin; import org.apache.logging.log4j.plugins.PluginFactory; @@ -152,7 +151,7 @@ public final class OutputStreamAppender extends AbstractOutputStreamAppender<Out private static OutputStreamManager getManager(final OutputStream target, final boolean follow, final Layout layout) { - final OutputStream os = target == null ? NullOutputStream.getInstance() : new CloseShieldOutputStream(target); + final OutputStream os = target == null ? OutputStream.nullOutputStream() : new CloseShieldOutputStream(target); final OutputStream targetRef = target == null ? os : target; final String managerName = targetRef.getClass().getName() + "@" + Integer.toHexString(targetRef.hashCode()) + '.' + follow; diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RandomAccessFileManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RandomAccessFileManager.java index 7768e20554..92444eda52 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RandomAccessFileManager.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RandomAccessFileManager.java @@ -28,7 +28,6 @@ import org.apache.logging.log4j.core.Layout; import org.apache.logging.log4j.core.LoggerContext; import org.apache.logging.log4j.core.config.Configuration; import org.apache.logging.log4j.core.util.FileUtils; -import org.apache.logging.log4j.core.util.NullOutputStream; /** * Extends OutputStreamManager but instead of using a buffered output stream, @@ -208,7 +207,7 @@ public class RandomAccessFileManager extends OutputStreamManager { } final boolean writeHeader = !data.append || !file.exists(); - final OutputStream os = NullOutputStream.getInstance(); + final OutputStream os = OutputStream.nullOutputStream(); final RandomAccessFile raf; try { FileUtils.makeParentDirs(file); diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManager.java index 416effd5fd..f0d719e050 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManager.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManager.java @@ -30,7 +30,6 @@ import org.apache.logging.log4j.core.appender.ConfigurationFactoryData; import org.apache.logging.log4j.core.appender.ManagerFactory; import org.apache.logging.log4j.core.config.Configuration; import org.apache.logging.log4j.core.util.FileUtils; -import org.apache.logging.log4j.core.util.NullOutputStream; /** * Extends RollingFileManager but instead of using a buffered output stream, this class uses a {@code ByteBuffer} and a @@ -256,7 +255,7 @@ public class RollingRandomAccessFileManager extends RollingFileManager { final boolean writeHeader = !data.append || file == null || !file.exists(); final RollingRandomAccessFileManager rrm = new RollingRandomAccessFileManager(data.getLoggerContext(), raf, name, data.pattern, - NullOutputStream.getInstance(), data.append, data.immediateFlush, data.bufferSize, size, initialTime, data.policy, + OutputStream.nullOutputStream(), data.append, data.immediateFlush, data.bufferSize, size, initialTime, data.policy, data.strategy, data.advertiseURI, data.layout, data.filePermissions, data.fileOwner, data.fileGroup, writeHeader); if (rrm.isAttributeViewEnabled()) { rrm.defineAttributeView(file.toPath()); 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 232cfed598..3750c14771 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 @@ -35,7 +35,7 @@ import org.apache.logging.log4j.core.appender.ManagerFactory; import org.apache.logging.log4j.core.appender.OutputStreamManager; import org.apache.logging.log4j.core.util.Closer; import org.apache.logging.log4j.core.util.Log4jThread; -import org.apache.logging.log4j.core.util.NullOutputStream; +import org.apache.logging.log4j.util.Cast; import org.apache.logging.log4j.util.Strings; /** @@ -425,7 +425,7 @@ public class TcpSocketManager extends AbstractSocketManager { return createManager(name, os, socket, inetAddress, data); } catch (final IOException ex) { LOGGER.error("TcpSocketManager ({}) caught exception and will continue:", name, ex); - os = NullOutputStream.getInstance(); + os = OutputStream.nullOutputStream(); } if (data.reconnectDelayMillis == 0) { Closer.closeSilently(socket); @@ -434,11 +434,10 @@ public class TcpSocketManager extends AbstractSocketManager { return createManager(name, os, null, inetAddress, data); } - @SuppressWarnings("unchecked") M createManager(final String name, final OutputStream os, final Socket socket, final InetAddress inetAddress, final T data) { - return (M) new TcpSocketManager(name, os, socket, inetAddress, data.host, data.port, + return Cast.cast(new TcpSocketManager(name, os, socket, inetAddress, data.host, data.port, data.connectTimeoutMillis, data.reconnectDelayMillis, data.immediateFail, data.layout, - data.bufferSize, data.socketOptions); + data.bufferSize, data.socketOptions)); } Socket createSocket(final T data) throws IOException { 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 deleted file mode 100644 index eb9be9f191..0000000000 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/NullOutputStream.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * 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.util; - -import java.io.IOException; -import java.io.OutputStream; - -/** - * Writes all data to the famous <b>/dev/null</b>. - * <p> - * This output stream has no destination (file/socket etc.) and all bytes written to it are ignored and lost. - * </p> - * Originally from Apache Commons IO. - * - * @since 2.3 - */ -public final class NullOutputStream extends OutputStream { - - private static final NullOutputStream INSTANCE = new NullOutputStream(); - - /** - * Gets the singleton instance. - * - * @return the singleton instance. - */ - public static NullOutputStream getInstance() { - return INSTANCE; - } - - private NullOutputStream() { - // do nothing - } - - /** - * Does nothing - output to <code>/dev/null</code>. - * - * @param b - * The bytes to write - * @param off - * The start offset - * @param len - * The number of bytes to write - */ - @Override - public void write(final byte[] b, final int off, final int len) { - // to /dev/null - } - - /** - * Does nothing - output to <code>/dev/null</code>. - * - * @param b - * The byte to write - */ - @Override - public void write(final int b) { - // to /dev/null - } - - /** - * Does nothing - output to <code>/dev/null</code>. - * - * @param b - * The bytes to write - * @throws IOException - * never - */ - @Override - public void write(final byte[] b) throws IOException { - // to /dev/null - } -}
