This is an automated email from the ASF dual-hosted git repository. rgoers pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
The following commit(s) were added to refs/heads/master by this push: new 2f1ff29 LOG4J2-1570 - Logging with a lambda expression with a method call that also logs would cause logs within method call to reference line num and method name of the parent method 2f1ff29 is described below commit 2f1ff291dfe1c859c1baa9ce5a457584b3ad0945 Author: Ralph Goers <rgo...@apache.org> AuthorDate: Wed Jan 16 21:00:25 2019 -0700 LOG4J2-1570 - Logging with a lambda expression with a method call that also logs would cause logs within method call to reference line num and method name of the parent method --- .../apache/logging/log4j/util/StackLocator.java | 12 ++-- .../log4j/io/LoggerBufferedInputStream.java | 19 +++-- .../logging/log4j/io/LoggerBufferedReader.java | 26 ++++--- .../logging/log4j/io/LoggerFilterOutputStream.java | 24 +++---- .../logging/log4j/io/LoggerFilterWriter.java | 29 +++----- .../apache/logging/log4j/io/LoggerInputStream.java | 22 +++--- .../logging/log4j/io/LoggerOutputStream.java | 15 ++-- .../apache/logging/log4j/io/LoggerPrintStream.java | 77 ++++++++++---------- .../apache/logging/log4j/io/LoggerPrintWriter.java | 82 ++++++++++++---------- .../org/apache/logging/log4j/io/LoggerReader.java | 30 +++----- .../org/apache/logging/log4j/io/LoggerWriter.java | 21 +++--- .../InternalBufferedInputStream.java} | 27 +++---- .../InternalBufferedReader.java} | 30 ++++---- .../InternalFilterOutputStream.java} | 21 +++--- .../InternalFilterWriter.java} | 19 +++-- .../InternalInputStream.java} | 18 ++--- .../InternalLoggerReader.java} | 18 ++--- .../InternalOutputStream.java} | 19 +++-- .../InternalPrintStream.java} | 38 +++++----- .../InternalPrintWriter.java} | 48 +++++-------- .../InternalReader.java} | 18 ++--- .../InternalWriter.java} | 16 ++--- .../logging/log4j/io/internal/package-info.java | 20 ++++++ pom.xml | 2 +- src/changes/changes.xml | 3 + 25 files changed, 319 insertions(+), 335 deletions(-) diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/StackLocator.java b/log4j-api/src/main/java/org/apache/logging/log4j/util/StackLocator.java index 4eba44b..dae9bd9 100644 --- a/log4j-api/src/main/java/org/apache/logging/log4j/util/StackLocator.java +++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/StackLocator.java @@ -170,13 +170,17 @@ public final class StackLocator { } // LOG4J2-1029 new Throwable().getStackTrace is faster than Thread.currentThread().getStackTrace(). final StackTraceElement[] stackTrace = new Throwable().getStackTrace(); - StackTraceElement last = null; - for (int i = stackTrace.length - 1; i > 0; i--) { + boolean found = false; + for (int i = 0; i < stackTrace.length; i++) { final String className = stackTrace[i].getClassName(); if (fqcnOfLogger.equals(className)) { - return last; + + found = true; + continue; + } + if (found) { + return stackTrace[i]; } - last = stackTrace[i]; } return null; } diff --git a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerBufferedInputStream.java b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerBufferedInputStream.java index 54d9796..6122b20 100644 --- a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerBufferedInputStream.java +++ b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerBufferedInputStream.java @@ -24,6 +24,8 @@ import java.nio.charset.Charset; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.io.internal.InternalBufferedInputStream; +import org.apache.logging.log4j.io.internal.InternalInputStream; import org.apache.logging.log4j.spi.ExtendedLogger; /** @@ -32,40 +34,43 @@ import org.apache.logging.log4j.spi.ExtendedLogger; */ public class LoggerBufferedInputStream extends BufferedInputStream { private static final String FQCN = LoggerBufferedInputStream.class.getName(); + private final InternalBufferedInputStream stream; protected LoggerBufferedInputStream(final InputStream in, final Charset charset, final ExtendedLogger logger, final String fqcn, final Level level, final Marker marker) { - super(new LoggerInputStream(in, charset, logger, fqcn == null ? FQCN : fqcn, level, marker)); + super(in); + stream = new InternalBufferedInputStream(in, charset, logger, fqcn == null ? FQCN: fqcn, level, marker); } protected LoggerBufferedInputStream(final InputStream in, final Charset charset, final int size, final ExtendedLogger logger, final String fqcn, final Level level, final Marker marker) { - super(new LoggerInputStream(in, charset, logger, fqcn == null ? FQCN : fqcn, level, marker), size); + super(in); + stream = new InternalBufferedInputStream(in, charset, size, logger, fqcn == null ? FQCN: fqcn, level, marker); } @Override public void close() throws IOException { - super.close(); + stream.close(); } @Override public synchronized int read() throws IOException { - return super.read(); + return stream.read(); } @Override public int read(final byte[] b) throws IOException { - return super.read(b, 0, b.length); + return stream.read(b); } @Override public synchronized int read(final byte[] b, final int off, final int len) throws IOException { - return super.read(b, off, len); + return stream.read(b, off, len); } @Override public String toString() { - return LoggerBufferedInputStream.class.getSimpleName() + "{stream=" + this.in + '}'; + return LoggerBufferedInputStream.class.getSimpleName() + stream.toString(); } } diff --git a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerBufferedReader.java b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerBufferedReader.java index 584e61a..a981ca5 100644 --- a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerBufferedReader.java +++ b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerBufferedReader.java @@ -24,6 +24,7 @@ import java.nio.CharBuffer; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.io.internal.InternalBufferedReader; import org.apache.logging.log4j.spi.ExtendedLogger; /** @@ -32,50 +33,47 @@ import org.apache.logging.log4j.spi.ExtendedLogger; */ public class LoggerBufferedReader extends BufferedReader { private static final String FQCN = LoggerBufferedReader.class.getName(); + private final InternalBufferedReader reader; protected LoggerBufferedReader(final Reader reader, final ExtendedLogger logger, final String fqcn, final Level level, final Marker marker) { - super(new LoggerReader(reader, logger, fqcn == null ? FQCN : fqcn, level, marker)); + super(reader); + this.reader = new InternalBufferedReader(reader, logger, fqcn == null ? FQCN: fqcn, level, marker); } protected LoggerBufferedReader(final Reader reader, final int size, final ExtendedLogger logger, final String fqcn, final Level level, final Marker marker) { - super(new LoggerReader(reader, logger, fqcn == null ? FQCN : fqcn, level, marker), size); + super(reader); + this.reader = new InternalBufferedReader(reader, size, logger, fqcn == null ? FQCN : fqcn, level, marker); } @Override public void close() throws IOException { - super.close(); + reader.close(); } @Override public int read() throws IOException { - return super.read(); + return reader.read(); } @Override public int read(final char[] cbuf) throws IOException { - return super.read(cbuf, 0, cbuf.length); + return reader.read(cbuf); } @Override public int read(final char[] cbuf, final int off, final int len) throws IOException { - return super.read(cbuf, off, len); + return reader.read(cbuf, off, len); } @Override public int read(final CharBuffer target) throws IOException { - final int len = target.remaining(); - final char[] cbuf = new char[len]; - final int charsRead = read(cbuf, 0, len); - if (charsRead > 0) { - target.put(cbuf, 0, charsRead); - } - return charsRead; + return reader.read(target); } @Override public String readLine() throws IOException { - return super.readLine(); + return reader.readLine(); } } diff --git a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerFilterOutputStream.java b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerFilterOutputStream.java index b608502..a103233 100644 --- a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerFilterOutputStream.java +++ b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerFilterOutputStream.java @@ -24,6 +24,7 @@ import java.nio.charset.Charset; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.io.internal.InternalFilterOutputStream; import org.apache.logging.log4j.spi.ExtendedLogger; /** @@ -37,47 +38,42 @@ import org.apache.logging.log4j.spi.ExtendedLogger; public class LoggerFilterOutputStream extends FilterOutputStream { private static final String FQCN = LoggerFilterOutputStream.class.getName(); - private final ByteStreamLogger logger; - private final String fqcn; + private final InternalFilterOutputStream logger; protected LoggerFilterOutputStream(final OutputStream out, final Charset charset, final ExtendedLogger logger, final String fqcn, final Level level, final Marker marker) { super(out); - this.logger = new ByteStreamLogger(logger, level, marker, charset); - this.fqcn = fqcn == null ? FQCN : fqcn; + this.logger = new InternalFilterOutputStream(out, charset, logger, fqcn == null ? FQCN : fqcn, + level, marker); } @Override public void close() throws IOException { - this.out.close(); - this.logger.close(this.fqcn); + this.logger.close(); } @Override public void flush() throws IOException { - this.out.flush(); + this.logger.flush(); } @Override public String toString() { - return LoggerFilterOutputStream.class.getSimpleName() + "{stream=" + this.out + '}'; + return LoggerFilterOutputStream.class.getSimpleName() + logger.toString(); } @Override public void write(final byte[] b) throws IOException { - this.out.write(b); - this.logger.put(this.fqcn, b, 0, b.length); + this.logger.write(b); } @Override public void write(final byte[] b, final int off, final int len) throws IOException { - this.out.write(b, off, len); - this.logger.put(this.fqcn, b, off, len); + this.logger.write(b, off, len); } @Override public void write(final int b) throws IOException { - this.out.write(b); - this.logger.put(this.fqcn, (byte) (b & 0xFF)); + this.logger.write(b); } } diff --git a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerFilterWriter.java b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerFilterWriter.java index 4b0991f..682e831 100644 --- a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerFilterWriter.java +++ b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerFilterWriter.java @@ -23,6 +23,7 @@ import java.io.Writer; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.io.internal.InternalFilterWriter; import org.apache.logging.log4j.spi.ExtendedLogger; /** @@ -34,59 +35,51 @@ import org.apache.logging.log4j.spi.ExtendedLogger; public class LoggerFilterWriter extends FilterWriter { private static final String FQCN = LoggerFilterWriter.class.getName(); - private final CharStreamLogger logger; - private final String fqcn; + private final InternalFilterWriter logger; protected LoggerFilterWriter(final Writer out, final ExtendedLogger logger, final String fqcn, final Level level, final Marker marker) { super(out); - this.logger = new CharStreamLogger(logger, level, marker); - this.fqcn = fqcn == null ? FQCN : fqcn; + this.logger = new InternalFilterWriter(out, logger, fqcn == null ? FQCN : fqcn, level, marker); } @Override public void close() throws IOException { - this.out.close(); - this.logger.close(this.fqcn); + this.logger.close(); } @Override public void flush() throws IOException { - this.out.flush(); + this.logger.flush(); } @Override public String toString() { - return LoggerFilterWriter.class.getSimpleName() + "{writer=" + this.out + '}'; + return LoggerFilterWriter.class.getSimpleName() + logger.toString(); } @Override public void write(final char[] cbuf) throws IOException { - this.out.write(cbuf); - this.logger.put(this.fqcn, cbuf, 0, cbuf.length); + this.logger.write(cbuf); } @Override public void write(final char[] cbuf, final int off, final int len) throws IOException { - this.out.write(cbuf, off, len); - this.logger.put(this.fqcn, cbuf, off, len); + this.logger.write(cbuf, off, len); } @Override public void write(final int c) throws IOException { - this.out.write(c); - this.logger.put(this.fqcn, (char) c); + this.logger.write(c); } @Override public void write(final String str) throws IOException { - this.out.write(str); - this.logger.put(this.fqcn, str, 0, str.length()); + this.logger.write(str); } @Override public void write(final String str, final int off, final int len) throws IOException { - this.out.write(str, off, len); - this.logger.put(this.fqcn, str, off, len); + this.logger.write(str, off, len); } } diff --git a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerInputStream.java b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerInputStream.java index 5366f19..8da122b 100644 --- a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerInputStream.java +++ b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerInputStream.java @@ -24,6 +24,7 @@ import java.nio.charset.Charset; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.io.internal.InternalInputStream; import org.apache.logging.log4j.spi.ExtendedLogger; /** @@ -34,43 +35,36 @@ import org.apache.logging.log4j.spi.ExtendedLogger; public class LoggerInputStream extends FilterInputStream { private static final String FQCN = LoggerInputStream.class.getName(); - private final String fqcn; - private final ByteStreamLogger logger; + private final InternalInputStream logger; protected LoggerInputStream(final InputStream in, final Charset charset, final ExtendedLogger logger, final String fqcn, final Level level, final Marker marker) { super(in); - this.logger = new ByteStreamLogger(logger, level, marker, charset); - this.fqcn = fqcn == null ? FQCN : fqcn; + this.logger = new InternalInputStream(in, charset, logger, fqcn == null ? FQCN : fqcn, level, marker); } @Override public void close() throws IOException { - this.logger.close(this.fqcn); - super.close(); + this.logger.close(); } @Override public int read() throws IOException { - final int b = super.read(); - this.logger.put(this.fqcn, b); - return b; + return logger.read(); } @Override public int read(final byte[] b) throws IOException { - return read(b, 0, b.length); + return logger.read(b); } @Override public int read(final byte[] b, final int off, final int len) throws IOException { - final int bytesRead = super.read(b, off, len); - this.logger.put(this.fqcn, b, off, bytesRead); - return bytesRead; + return logger.read(b, off, len); } @Override public String toString() { - return LoggerInputStream.class.getSimpleName() + "{stream=" + this.in + '}'; + return LoggerInputStream.class.getSimpleName() + logger.toString(); } } diff --git a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerOutputStream.java b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerOutputStream.java index b8ea392..e1bd658 100644 --- a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerOutputStream.java +++ b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerOutputStream.java @@ -23,6 +23,7 @@ import java.nio.charset.Charset; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.io.internal.InternalOutputStream; import org.apache.logging.log4j.spi.ExtendedLogger; /** @@ -36,18 +37,16 @@ import org.apache.logging.log4j.spi.ExtendedLogger; public class LoggerOutputStream extends OutputStream { private static final String FQCN = LoggerOutputStream.class.getName(); - private final ByteStreamLogger logger; - private final String fqcn; + private final InternalOutputStream logger; protected LoggerOutputStream(final ExtendedLogger logger, final Level level, final Marker marker, final Charset charset, final String fqcn) { - this.logger = new ByteStreamLogger(logger, level, marker, charset); - this.fqcn = fqcn == null ? FQCN : fqcn; + this.logger = new InternalOutputStream(logger, level, marker, charset, fqcn == null ? FQCN : fqcn); } @Override public void close() throws IOException { - this.logger.close(this.fqcn); + this.logger.close(); } @Override @@ -57,16 +56,16 @@ public class LoggerOutputStream extends OutputStream { @Override public void write(final byte[] b) throws IOException { - this.logger.put(this.fqcn, b, 0, b.length); + logger.write(b); } @Override public void write(final byte[] b, final int off, final int len) throws IOException { - this.logger.put(this.fqcn, b, off, len); + logger.write(b, off, len); } @Override public void write(final int b) throws IOException { - this.logger.put(this.fqcn, (byte) (b & 0xFF)); + logger.write(b); } } diff --git a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerPrintStream.java b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerPrintStream.java index 30bac34..0489119 100644 --- a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerPrintStream.java +++ b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerPrintStream.java @@ -17,6 +17,7 @@ package org.apache.logging.log4j.io; +import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.PrintStream; @@ -26,6 +27,7 @@ import java.util.Locale; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.io.internal.InternalPrintStream; import org.apache.logging.log4j.spi.ExtendedLogger; /** @@ -38,19 +40,20 @@ import org.apache.logging.log4j.spi.ExtendedLogger; */ public class LoggerPrintStream extends PrintStream { private static final String FQCN = LoggerPrintStream.class.getName(); + private final InternalPrintStream psLogger; protected LoggerPrintStream(final ExtendedLogger logger, final boolean autoFlush, final Charset charset, final String fqcn, final Level level, final Marker marker) throws UnsupportedEncodingException { - super(new LoggerOutputStream(logger, level, marker, ensureNonNull(charset), fqcn == null ? FQCN : fqcn), - autoFlush, ensureNonNull(charset).name()); + super(new PrintStream(new ByteArrayOutputStream())); + psLogger = new InternalPrintStream(logger, autoFlush, charset, fqcn == null ? FQCN : fqcn, level, marker); } protected LoggerPrintStream(final OutputStream out, final boolean autoFlush, final Charset charset, final ExtendedLogger logger, final String fqcn, final Level level, final Marker marker) throws UnsupportedEncodingException { - super(new LoggerFilterOutputStream(out, ensureNonNull(charset), logger, fqcn == null ? FQCN : fqcn, level, - marker), autoFlush, ensureNonNull(charset).name()); + super(new PrintStream(out)); + psLogger = new InternalPrintStream(out, autoFlush, charset, logger, fqcn == null ? FQCN : fqcn, level, marker); } private static Charset ensureNonNull(final Charset charset) { @@ -59,173 +62,173 @@ public class LoggerPrintStream extends PrintStream { @Override public LoggerPrintStream append(final char c) { - super.append(c); + psLogger.append(c); return this; } @Override public LoggerPrintStream append(final CharSequence csq) { - super.append(csq); + psLogger.append(csq); return this; } @Override public LoggerPrintStream append(final CharSequence csq, final int start, final int end) { - super.append(csq, start, end); + psLogger.append(csq, start, end); return this; } @Override public boolean checkError() { - return super.checkError(); + return psLogger.checkError(); } @Override public void close() { - super.close(); + psLogger.close(); } @Override public void flush() { - super.flush(); + psLogger.flush(); } @Override public LoggerPrintStream format(final Locale l, final String format, final Object... args) { - super.format(l, format, args); + psLogger.format(l, format, args); return this; } @Override public LoggerPrintStream format(final String format, final Object... args) { - super.format(format, args); + psLogger.format(format, args); return this; } @Override public void print(final boolean b) { - super.print(b); + psLogger.print(b); } @Override public void print(final char c) { - super.print(c); + psLogger.print(c); } @Override public void print(final char[] s) { - super.print(s); + psLogger.print(s); } @Override public void print(final double d) { - super.print(d); + psLogger.print(d); } @Override public void print(final float f) { - super.print(f); + psLogger.print(f); } @Override public void print(final int i) { - super.print(i); + psLogger.print(i); } @Override public void print(final long l) { - super.print(l); + psLogger.print(l); } @Override public void print(final Object obj) { - super.print(obj); + psLogger.print(obj); } @Override public void print(final String s) { - super.print(s); + psLogger.print(s); } @Override public LoggerPrintStream printf(final Locale l, final String format, final Object... args) { - super.printf(l, format, args); + psLogger.printf(l, format, args); return this; } @Override public LoggerPrintStream printf(final String format, final Object... args) { - super.printf(format, args); + psLogger.printf(format, args); return this; } @Override public void println() { - super.println(); + psLogger.println(); } @Override public void println(final boolean x) { - super.println(x); + psLogger.println(x); } @Override public void println(final char x) { - super.println(x); + psLogger.println(x); } @Override public void println(final char[] x) { - super.println(x); + psLogger.println(x); } @Override public void println(final double x) { - super.println(x); + psLogger.println(x); } @Override public void println(final float x) { - super.println(x); + psLogger.println(x); } @Override public void println(final int x) { - super.println(x); + psLogger.println(x); } @Override public void println(final long x) { - super.println(x); + psLogger.println(x); } @Override public void println(final Object x) { - super.println(x); + psLogger.println(x); } @Override public void println(final String x) { - super.println(x); + psLogger.println(x); } @Override public String toString() { - return LoggerPrintStream.class.getSimpleName() + "{stream=" + this.out + '}'; + return LoggerPrintStream.class.getSimpleName() + psLogger.toString(); } @Override public void write(final byte[] b) throws IOException { - super.write(b); + psLogger.write(b); } @Override public void write(final byte[] b, final int off, final int len) { - super.write(b, off, len); + psLogger.write(b, off, len); } @Override public void write(final int b) { - super.write(b); + psLogger.write(b); } } diff --git a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerPrintWriter.java b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerPrintWriter.java index ab7977c..d63ab3b 100644 --- a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerPrintWriter.java +++ b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerPrintWriter.java @@ -17,12 +17,15 @@ package org.apache.logging.log4j.io; +import java.io.IOException; import java.io.PrintWriter; +import java.io.StringWriter; import java.io.Writer; import java.util.Locale; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.io.internal.InternalPrintWriter; import org.apache.logging.log4j.spi.ExtendedLogger; /** @@ -41,200 +44,203 @@ import org.apache.logging.log4j.spi.ExtendedLogger; * @since 2.1 */ // TODO -// All method implementations that call only super are apparently required for the unit tests to pass. +// All method implementations that call only writer.are apparently required for the unit tests to pass. // Not sure if this a bug in the tests or a feature. public class LoggerPrintWriter extends PrintWriter { private static final String FQCN = LoggerPrintWriter.class.getName(); + private final InternalPrintWriter writer; protected LoggerPrintWriter(final ExtendedLogger logger, final boolean autoFlush, final String fqcn, final Level level, final Marker marker) { - super(new LoggerWriter(logger, fqcn == null ? FQCN : fqcn, level, marker), autoFlush); + super(new StringWriter()); + writer = new InternalPrintWriter(logger, autoFlush, fqcn == null ? FQCN : fqcn, level, marker); } protected LoggerPrintWriter(final Writer writer, final boolean autoFlush, final ExtendedLogger logger, final String fqcn, final Level level, final Marker marker) { - super(new LoggerFilterWriter(writer, logger, fqcn == null ? FQCN : fqcn, level, marker), autoFlush); + super(writer); + this.writer = new InternalPrintWriter(writer, autoFlush, logger, fqcn == null ? FQCN : fqcn, level, marker); } @Override public LoggerPrintWriter append(final char c) { - super.append(c); + writer.append(c); return this; } @Override public LoggerPrintWriter append(final CharSequence csq) { - super.append(csq); + writer.append(csq); return this; } @Override public LoggerPrintWriter append(final CharSequence csq, final int start, final int end) { - super.append(csq, start, end); + writer.append(csq, start, end); return this; } @Override public boolean checkError() { - return super.checkError(); + return writer.checkError(); } @Override public void close() { - super.close(); + writer.close(); } @Override public void flush() { - super.flush(); + writer.flush(); } @Override public LoggerPrintWriter format(final Locale l, final String format, final Object... args) { - super.format(l, format, args); + writer.format(l, format, args); return this; } @Override public LoggerPrintWriter format(final String format, final Object... args) { - super.format(format, args); + writer.format(format, args); return this; } @Override public void print(final boolean b) { - super.print(b); + writer.print(b); } @Override public void print(final char c) { - super.print(c); + writer.print(c); } @Override public void print(final char[] s) { - super.print(s); + writer.print(s); } @Override public void print(final double d) { - super.print(d); + writer.print(d); } @Override public void print(final float f) { - super.print(f); + writer.print(f); } @Override public void print(final int i) { - super.print(i); + writer.print(i); } @Override public void print(final long l) { - super.print(l); + writer.print(l); } @Override public void print(final Object obj) { - super.print(obj); + writer.print(obj); } @Override public void print(final String s) { - super.print(s); + writer.print(s); } @Override public LoggerPrintWriter printf(final Locale l, final String format, final Object... args) { - super.printf(l, format, args); + writer.printf(l, format, args); return this; } @Override public LoggerPrintWriter printf(final String format, final Object... args) { - super.printf(format, args); + writer.printf(format, args); return this; } @Override public void println() { - super.println(); + writer.println(); } @Override public void println(final boolean x) { - super.println(x); + writer.println(x); } @Override public void println(final char x) { - super.println(x); + writer.println(x); } @Override public void println(final char[] x) { - super.println(x); + writer.println(x); } @Override public void println(final double x) { - super.println(x); + writer.println(x); } @Override public void println(final float x) { - super.println(x); + writer.println(x); } @Override public void println(final int x) { - super.println(x); + writer.println(x); } @Override public void println(final long x) { - super.println(x); + writer.println(x); } @Override public void println(final Object x) { - super.println(x); + writer.println(x); } @Override public void println(final String x) { - super.println(x); + writer.println(x); } @Override public String toString() { - return LoggerPrintWriter.class.getSimpleName() + "{stream=" + this.out + '}'; + return LoggerPrintWriter.class.getSimpleName() + writer.toString(); } @Override public void write(final char[] buf) { - super.write(buf); + writer.write(buf); } @Override public void write(final char[] buf, final int off, final int len) { - super.write(buf, off, len); + writer.write(buf, off, len); } @Override public void write(final int c) { - super.write(c); + writer.write(c); } @Override public void write(final String s) { - super.write(s); + writer.write(s); } @Override public void write(final String s, final int off, final int len) { - super.write(s, off, len); + writer.write(s, off, len); } } diff --git a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerReader.java b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerReader.java index 265e8e7..01834ce 100644 --- a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerReader.java +++ b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerReader.java @@ -24,6 +24,7 @@ import java.nio.CharBuffer; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.io.internal.InternalReader; import org.apache.logging.log4j.spi.ExtendedLogger; /** @@ -34,54 +35,41 @@ import org.apache.logging.log4j.spi.ExtendedLogger; public class LoggerReader extends FilterReader { private static final String FQCN = LoggerReader.class.getName(); - private final CharStreamLogger logger; - private final String fqcn; + private final InternalReader reader; protected LoggerReader(final Reader reader, final ExtendedLogger logger, final String fqcn, final Level level, final Marker marker) { super(reader); - this.logger = new CharStreamLogger(logger, level, marker); - this.fqcn = fqcn == null ? FQCN : fqcn; + this.reader = new InternalReader(reader, logger, fqcn == null ? FQCN : fqcn, level, marker); } @Override public void close() throws IOException { - super.close(); - this.logger.close(this.fqcn); + reader.close(); } @Override public int read() throws IOException { - final int c = super.read(); - this.logger.put(this.fqcn, c); - return c; + return reader.read(); } @Override public int read(final char[] cbuf) throws IOException { - return read(cbuf, 0, cbuf.length); + return reader.read(cbuf); } @Override public int read(final char[] cbuf, final int off, final int len) throws IOException { - final int charsRead = super.read(cbuf, off, len); - this.logger.put(this.fqcn, cbuf, off, charsRead); - return charsRead; + return reader.read(cbuf, off, len); } @Override public int read(final CharBuffer target) throws IOException { - final int len = target.remaining(); - final char[] cbuf = new char[len]; - final int charsRead = read(cbuf, 0, len); - if (charsRead > 0) { - target.put(cbuf, 0, charsRead); - } - return charsRead; + return reader.read(target); } @Override public String toString() { - return LoggerReader.class.getSimpleName() + "{stream=" + this.in + '}'; + return LoggerReader.class.getSimpleName() + this.reader.toString(); } } diff --git a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerWriter.java b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerWriter.java index 8fba24c..29d61fa 100644 --- a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerWriter.java +++ b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerWriter.java @@ -22,6 +22,7 @@ import java.io.Writer; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.io.internal.InternalWriter; import org.apache.logging.log4j.spi.ExtendedLogger; /** @@ -33,17 +34,15 @@ import org.apache.logging.log4j.spi.ExtendedLogger; public class LoggerWriter extends Writer { private static final String FQCN = LoggerWriter.class.getName(); - private final CharStreamLogger logger; - private final String fqcn; + private final InternalWriter writer; protected LoggerWriter(final ExtendedLogger logger, final String fqcn, final Level level, final Marker marker) { - this.logger = new CharStreamLogger(logger, level, marker); - this.fqcn = fqcn == null ? FQCN : fqcn; + this.writer = new InternalWriter(logger, fqcn == null ? FQCN : fqcn, level, marker); } @Override public void close() throws IOException { - this.logger.close(this.fqcn); + writer.close(); } @Override @@ -53,31 +52,31 @@ public class LoggerWriter extends Writer { @Override public String toString() { - return this.getClass().getSimpleName() + "[fqcn=" + this.fqcn + ", logger=" + this.logger + "]"; + return this.getClass().getSimpleName() + "[fqcn=" + writer.toString(); } @Override public void write(final char[] cbuf) throws IOException { - this.logger.put(this.fqcn, cbuf, 0, cbuf.length); + writer.write(cbuf); } @Override public void write(final char[] cbuf, final int off, final int len) throws IOException { - this.logger.put(this.fqcn, cbuf, off, len); + writer.write(cbuf, off, len); } @Override public void write(final int c) throws IOException { - this.logger.put(this.fqcn, (char) c); + writer.write(c); } @Override public void write(final String str) throws IOException { - this.logger.put(this.fqcn, str, 0, str.length()); + writer.write(str); } @Override public void write(final String str, final int off, final int len) throws IOException { - this.logger.put(this.fqcn, str, off, len); + writer.write(str, off, len); } } diff --git a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerBufferedInputStream.java b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalBufferedInputStream.java similarity index 69% copy from log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerBufferedInputStream.java copy to log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalBufferedInputStream.java index 54d9796..9f04ed3 100644 --- a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerBufferedInputStream.java +++ b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalBufferedInputStream.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.logging.log4j.io; +package org.apache.logging.log4j.io.internal; import java.io.BufferedInputStream; import java.io.IOException; @@ -24,41 +24,42 @@ import java.nio.charset.Charset; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.io.LoggerInputStream; import org.apache.logging.log4j.spi.ExtendedLogger; /** - * - * @since 2.1 + * Internal class that exists primiarly to allow location calculations to work. + * @since 2.12 */ -public class LoggerBufferedInputStream extends BufferedInputStream { - private static final String FQCN = LoggerBufferedInputStream.class.getName(); +public class InternalBufferedInputStream extends BufferedInputStream { + private static final String FQCN = InternalBufferedInputStream.class.getName(); - protected LoggerBufferedInputStream(final InputStream in, final Charset charset, final ExtendedLogger logger, + public InternalBufferedInputStream(final InputStream in, final Charset charset, final ExtendedLogger logger, final String fqcn, final Level level, final Marker marker) { - super(new LoggerInputStream(in, charset, logger, fqcn == null ? FQCN : fqcn, level, marker)); + super(new InternalInputStream(in, charset, logger, fqcn == null ? FQCN : fqcn, level, marker)); } - protected LoggerBufferedInputStream(final InputStream in, final Charset charset, final int size, + public InternalBufferedInputStream(final InputStream in, final Charset charset, final int size, final ExtendedLogger logger, final String fqcn, final Level level, final Marker marker) { - super(new LoggerInputStream(in, charset, logger, fqcn == null ? FQCN : fqcn, level, marker), size); + super(new InternalInputStream(in, charset, logger, fqcn == null ? FQCN : fqcn, level, marker), size); } @Override public void close() throws IOException { super.close(); } - + @Override public synchronized int read() throws IOException { return super.read(); } - + @Override public int read(final byte[] b) throws IOException { return super.read(b, 0, b.length); } - + @Override public synchronized int read(final byte[] b, final int off, final int len) throws IOException { return super.read(b, off, len); @@ -66,6 +67,6 @@ public class LoggerBufferedInputStream extends BufferedInputStream { @Override public String toString() { - return LoggerBufferedInputStream.class.getSimpleName() + "{stream=" + this.in + '}'; + return "{stream=" + this.in + '}'; } } diff --git a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerBufferedReader.java b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalBufferedReader.java similarity index 74% copy from log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerBufferedReader.java copy to log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalBufferedReader.java index 584e61a..90452a4 100644 --- a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerBufferedReader.java +++ b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalBufferedReader.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.logging.log4j.io; +package org.apache.logging.log4j.io.internal; import java.io.BufferedReader; import java.io.IOException; @@ -27,42 +27,42 @@ import org.apache.logging.log4j.Marker; import org.apache.logging.log4j.spi.ExtendedLogger; /** - * - * @since 2.1 + * Internal class that exists primiarly to allow location calculations to work. + * @since 2.12 */ -public class LoggerBufferedReader extends BufferedReader { - private static final String FQCN = LoggerBufferedReader.class.getName(); +public class InternalBufferedReader extends BufferedReader { + private static final String FQCN = InternalBufferedReader.class.getName(); - protected LoggerBufferedReader(final Reader reader, final ExtendedLogger logger, final String fqcn, + public InternalBufferedReader(final Reader reader, final ExtendedLogger logger, final String fqcn, final Level level, final Marker marker) { - super(new LoggerReader(reader, logger, fqcn == null ? FQCN : fqcn, level, marker)); + super(new InternalLoggerReader(reader, logger, fqcn == null ? FQCN : fqcn, level, marker)); } - protected LoggerBufferedReader(final Reader reader, final int size, final ExtendedLogger logger, final String fqcn, + public InternalBufferedReader(final Reader reader, final int size, final ExtendedLogger logger, final String fqcn, final Level level, final Marker marker) { - super(new LoggerReader(reader, logger, fqcn == null ? FQCN : fqcn, level, marker), size); + super(new InternalLoggerReader(reader, logger, fqcn == null ? FQCN : fqcn, level, marker), size); } - + @Override public void close() throws IOException { super.close(); } - + @Override public int read() throws IOException { return super.read(); } - + @Override public int read(final char[] cbuf) throws IOException { return super.read(cbuf, 0, cbuf.length); } - + @Override public int read(final char[] cbuf, final int off, final int len) throws IOException { return super.read(cbuf, off, len); } - + @Override public int read(final CharBuffer target) throws IOException { final int len = target.remaining(); @@ -73,7 +73,7 @@ public class LoggerBufferedReader extends BufferedReader { } return charsRead; } - + @Override public String readLine() throws IOException { return super.readLine(); diff --git a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerFilterOutputStream.java b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalFilterOutputStream.java similarity index 71% copy from log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerFilterOutputStream.java copy to log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalFilterOutputStream.java index b608502..a726818 100644 --- a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerFilterOutputStream.java +++ b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalFilterOutputStream.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.logging.log4j.io; +package org.apache.logging.log4j.io.internal; import java.io.FilterOutputStream; import java.io.IOException; @@ -24,27 +24,24 @@ import java.nio.charset.Charset; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.io.ByteStreamLogger; import org.apache.logging.log4j.spi.ExtendedLogger; /** - * Logs each line written to a pre-defined level. Can also be configured with a Marker. This class provides an interface - * that follows the {@link java.io.OutputStream} methods in spirit, but doesn't require output to any external stream. - * This class should <em>not</em> be used as a stream for an underlying logger unless it's being used as a bridge. - * Otherwise, infinite loops may occur! - * - * @since 2.1 + * Internal class that exists primiarly to allow location calculations to work. + * + * @since 2.12 */ -public class LoggerFilterOutputStream extends FilterOutputStream { - private static final String FQCN = LoggerFilterOutputStream.class.getName(); +public class InternalFilterOutputStream extends FilterOutputStream { private final ByteStreamLogger logger; private final String fqcn; - protected LoggerFilterOutputStream(final OutputStream out, final Charset charset, final ExtendedLogger logger, + public InternalFilterOutputStream(final OutputStream out, final Charset charset, final ExtendedLogger logger, final String fqcn, final Level level, final Marker marker) { super(out); this.logger = new ByteStreamLogger(logger, level, marker, charset); - this.fqcn = fqcn == null ? FQCN : fqcn; + this.fqcn = fqcn; } @Override @@ -60,7 +57,7 @@ public class LoggerFilterOutputStream extends FilterOutputStream { @Override public String toString() { - return LoggerFilterOutputStream.class.getSimpleName() + "{stream=" + this.out + '}'; + return "{stream=" + this.out + '}'; } @Override diff --git a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerFilterWriter.java b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalFilterWriter.java similarity index 78% copy from log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerFilterWriter.java copy to log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalFilterWriter.java index 4b0991f..67c4859 100644 --- a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerFilterWriter.java +++ b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalFilterWriter.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.logging.log4j.io; +package org.apache.logging.log4j.io.internal; import java.io.FilterWriter; import java.io.IOException; @@ -23,25 +23,24 @@ import java.io.Writer; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.io.CharStreamLogger; import org.apache.logging.log4j.spi.ExtendedLogger; /** - * Logs each line written to a pre-defined level. Can also be configured with a Marker. This class provides an interface - * that follows the {@link java.io.Writer} methods in spirit, but doesn't require output to any external out. - * - * @since 2.1 + * Internal class that exists primarily to allow location calculation to work. + * + * @since 2.12 */ -public class LoggerFilterWriter extends FilterWriter { - private static final String FQCN = LoggerFilterWriter.class.getName(); +public class InternalFilterWriter extends FilterWriter { private final CharStreamLogger logger; private final String fqcn; - protected LoggerFilterWriter(final Writer out, final ExtendedLogger logger, final String fqcn, final Level level, + public InternalFilterWriter(final Writer out, final ExtendedLogger logger, final String fqcn, final Level level, final Marker marker) { super(out); this.logger = new CharStreamLogger(logger, level, marker); - this.fqcn = fqcn == null ? FQCN : fqcn; + this.fqcn = fqcn; } @Override @@ -57,7 +56,7 @@ public class LoggerFilterWriter extends FilterWriter { @Override public String toString() { - return LoggerFilterWriter.class.getSimpleName() + "{writer=" + this.out + '}'; + return "{writer=" + this.out + '}'; } @Override diff --git a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerInputStream.java b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalInputStream.java similarity index 79% copy from log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerInputStream.java copy to log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalInputStream.java index 5366f19..160766a 100644 --- a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerInputStream.java +++ b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalInputStream.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.logging.log4j.io; +package org.apache.logging.log4j.io.internal; import java.io.FilterInputStream; import java.io.IOException; @@ -24,24 +24,24 @@ import java.nio.charset.Charset; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.io.ByteStreamLogger; import org.apache.logging.log4j.spi.ExtendedLogger; /** - * Logs each line read to a pre-defined level. Can also be configured with a Marker. - * - * @since 2.1 + * Internal class that exists primarily to allow location calculation to work. + * + * @since 2.12 */ -public class LoggerInputStream extends FilterInputStream { - private static final String FQCN = LoggerInputStream.class.getName(); +public class InternalInputStream extends FilterInputStream { private final String fqcn; private final ByteStreamLogger logger; - protected LoggerInputStream(final InputStream in, final Charset charset, final ExtendedLogger logger, + public InternalInputStream(final InputStream in, final Charset charset, final ExtendedLogger logger, final String fqcn, final Level level, final Marker marker) { super(in); this.logger = new ByteStreamLogger(logger, level, marker, charset); - this.fqcn = fqcn == null ? FQCN : fqcn; + this.fqcn = fqcn; } @Override @@ -71,6 +71,6 @@ public class LoggerInputStream extends FilterInputStream { @Override public String toString() { - return LoggerInputStream.class.getSimpleName() + "{stream=" + this.in + '}'; + return "{stream=" + this.in + '}'; } } diff --git a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerReader.java b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalLoggerReader.java similarity index 82% copy from log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerReader.java copy to log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalLoggerReader.java index 265e8e7..86914ed 100644 --- a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerReader.java +++ b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalLoggerReader.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.logging.log4j.io; +package org.apache.logging.log4j.io.internal; import java.io.FilterReader; import java.io.IOException; @@ -24,24 +24,24 @@ import java.nio.CharBuffer; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.io.CharStreamLogger; import org.apache.logging.log4j.spi.ExtendedLogger; /** - * Logs each line read to a pre-defined level. Can also be configured with a Marker. - * - * @since 2.1 + * Internal class that exists primarily to allow location calculation to work. + * + * @since 2.12 */ -public class LoggerReader extends FilterReader { - private static final String FQCN = LoggerReader.class.getName(); +public class InternalLoggerReader extends FilterReader { private final CharStreamLogger logger; private final String fqcn; - protected LoggerReader(final Reader reader, final ExtendedLogger logger, final String fqcn, final Level level, + public InternalLoggerReader(final Reader reader, final ExtendedLogger logger, final String fqcn, final Level level, final Marker marker) { super(reader); this.logger = new CharStreamLogger(logger, level, marker); - this.fqcn = fqcn == null ? FQCN : fqcn; + this.fqcn = fqcn; } @Override @@ -82,6 +82,6 @@ public class LoggerReader extends FilterReader { @Override public String toString() { - return LoggerReader.class.getSimpleName() + "{stream=" + this.in + '}'; + return "{stream=" + this.in + '}'; } } diff --git a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerOutputStream.java b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalOutputStream.java similarity index 72% copy from log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerOutputStream.java copy to log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalOutputStream.java index b8ea392..595a01c 100644 --- a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerOutputStream.java +++ b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalOutputStream.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.logging.log4j.io; +package org.apache.logging.log4j.io.internal; import java.io.IOException; import java.io.OutputStream; @@ -23,26 +23,23 @@ import java.nio.charset.Charset; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.io.ByteStreamLogger; import org.apache.logging.log4j.spi.ExtendedLogger; /** - * Logs each line written to a pre-defined level. Can also be configured with a Marker. This class provides an interface - * that follows the {@link java.io.OutputStream} methods in spirit, but doesn't require output to any external stream. - * This class should <em>not</em> be used as a stream for an underlying logger unless it's being used as a bridge. - * Otherwise, infinite loops may occur! - * - * @since 2.1 + * Internal class that exists primarily to allow location calculation to work. + * + * @since 2.12 */ -public class LoggerOutputStream extends OutputStream { - private static final String FQCN = LoggerOutputStream.class.getName(); +public class InternalOutputStream extends OutputStream { private final ByteStreamLogger logger; private final String fqcn; - protected LoggerOutputStream(final ExtendedLogger logger, final Level level, final Marker marker, + public InternalOutputStream(final ExtendedLogger logger, final Level level, final Marker marker, final Charset charset, final String fqcn) { this.logger = new ByteStreamLogger(logger, level, marker, charset); - this.fqcn = fqcn == null ? FQCN : fqcn; + this.fqcn = fqcn; } @Override diff --git a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerPrintStream.java b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalPrintStream.java similarity index 72% copy from log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerPrintStream.java copy to log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalPrintStream.java index 30bac34..529d4b6 100644 --- a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerPrintStream.java +++ b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalPrintStream.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.logging.log4j.io; +package org.apache.logging.log4j.io.internal; import java.io.IOException; import java.io.OutputStream; @@ -29,27 +29,23 @@ import org.apache.logging.log4j.Marker; import org.apache.logging.log4j.spi.ExtendedLogger; /** - * Logs each line written to a pre-defined level. Can also be configured with a Marker. This class provides an interface - * that follows the {@link java.io.PrintStream} methods in spirit, but doesn't require output to any external stream. - * This class should <em>not</em> be used as a stream for an underlying logger unless it's being used as a bridge. - * Otherwise, infinite loops may occur! - * - * @since 2.1 + * Internal class used primarily to allow location calculations to work properly. + * + * @since 2.12 */ -public class LoggerPrintStream extends PrintStream { - private static final String FQCN = LoggerPrintStream.class.getName(); +public class InternalPrintStream extends PrintStream { - protected LoggerPrintStream(final ExtendedLogger logger, final boolean autoFlush, final Charset charset, + public InternalPrintStream(final ExtendedLogger logger, final boolean autoFlush, final Charset charset, final String fqcn, final Level level, final Marker marker) throws UnsupportedEncodingException { - super(new LoggerOutputStream(logger, level, marker, ensureNonNull(charset), fqcn == null ? FQCN : fqcn), + super(new InternalOutputStream(logger, level, marker, ensureNonNull(charset), fqcn), autoFlush, ensureNonNull(charset).name()); } - protected LoggerPrintStream(final OutputStream out, final boolean autoFlush, final Charset charset, + public InternalPrintStream(final OutputStream out, final boolean autoFlush, final Charset charset, final ExtendedLogger logger, final String fqcn, final Level level, final Marker marker) throws UnsupportedEncodingException { - super(new LoggerFilterOutputStream(out, ensureNonNull(charset), logger, fqcn == null ? FQCN : fqcn, level, + super(new InternalFilterOutputStream(out, ensureNonNull(charset), logger, fqcn, level, marker), autoFlush, ensureNonNull(charset).name()); } @@ -58,19 +54,19 @@ public class LoggerPrintStream extends PrintStream { } @Override - public LoggerPrintStream append(final char c) { + public InternalPrintStream append(final char c) { super.append(c); return this; } @Override - public LoggerPrintStream append(final CharSequence csq) { + public InternalPrintStream append(final CharSequence csq) { super.append(csq); return this; } @Override - public LoggerPrintStream append(final CharSequence csq, final int start, final int end) { + public InternalPrintStream append(final CharSequence csq, final int start, final int end) { super.append(csq, start, end); return this; } @@ -91,13 +87,13 @@ public class LoggerPrintStream extends PrintStream { } @Override - public LoggerPrintStream format(final Locale l, final String format, final Object... args) { + public InternalPrintStream format(final Locale l, final String format, final Object... args) { super.format(l, format, args); return this; } @Override - public LoggerPrintStream format(final String format, final Object... args) { + public InternalPrintStream format(final String format, final Object... args) { super.format(format, args); return this; } @@ -148,13 +144,13 @@ public class LoggerPrintStream extends PrintStream { } @Override - public LoggerPrintStream printf(final Locale l, final String format, final Object... args) { + public InternalPrintStream printf(final Locale l, final String format, final Object... args) { super.printf(l, format, args); return this; } @Override - public LoggerPrintStream printf(final String format, final Object... args) { + public InternalPrintStream printf(final String format, final Object... args) { super.printf(format, args); return this; } @@ -211,7 +207,7 @@ public class LoggerPrintStream extends PrintStream { @Override public String toString() { - return LoggerPrintStream.class.getSimpleName() + "{stream=" + this.out + '}'; + return "{stream=" + this.out + '}'; } @Override diff --git a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerPrintWriter.java b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalPrintWriter.java similarity index 68% copy from log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerPrintWriter.java copy to log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalPrintWriter.java index ab7977c..f8f8c92 100644 --- a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerPrintWriter.java +++ b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalPrintWriter.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.logging.log4j.io; +package org.apache.logging.log4j.io.internal; import java.io.PrintWriter; import java.io.Writer; @@ -23,53 +23,41 @@ import java.util.Locale; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.io.LoggerFilterWriter; +import org.apache.logging.log4j.io.LoggerWriter; import org.apache.logging.log4j.spi.ExtendedLogger; /** - * Logs each line written to a pre-defined level. Can also be configured with a Marker. This class provides an interface - * that follows the {@link java.io.PrintWriter} methods in spirit, but doesn't require output to any external writer. - * <p> - * Integration with JDBC logging can be as simple as: - * </p> - * <pre> - * PrintWriter pw = IoBuilder.forLogger().setLevel(Level.DEBUG).buildPrintWriter(); - * DriverManager.setLogWriter(pw); - * DataSource ds = ... - * ds.setLogWriter(pw); - * </pre> + * Internal class that exists primiarly to allow location calculations to work. * - * @since 2.1 + * @since 2.12 */ -// TODO -// All method implementations that call only super are apparently required for the unit tests to pass. -// Not sure if this a bug in the tests or a feature. -public class LoggerPrintWriter extends PrintWriter { - private static final String FQCN = LoggerPrintWriter.class.getName(); +public class InternalPrintWriter extends PrintWriter { - protected LoggerPrintWriter(final ExtendedLogger logger, final boolean autoFlush, final String fqcn, + public InternalPrintWriter(final ExtendedLogger logger, final boolean autoFlush, final String fqcn, final Level level, final Marker marker) { - super(new LoggerWriter(logger, fqcn == null ? FQCN : fqcn, level, marker), autoFlush); + super(new InternalWriter(logger, fqcn, level, marker), autoFlush); } - protected LoggerPrintWriter(final Writer writer, final boolean autoFlush, final ExtendedLogger logger, + public InternalPrintWriter(final Writer writer, final boolean autoFlush, final ExtendedLogger logger, final String fqcn, final Level level, final Marker marker) { - super(new LoggerFilterWriter(writer, logger, fqcn == null ? FQCN : fqcn, level, marker), autoFlush); + super(new InternalFilterWriter(writer, logger, fqcn, level, marker), autoFlush); } @Override - public LoggerPrintWriter append(final char c) { + public InternalPrintWriter append(final char c) { super.append(c); return this; } @Override - public LoggerPrintWriter append(final CharSequence csq) { + public InternalPrintWriter append(final CharSequence csq) { super.append(csq); return this; } @Override - public LoggerPrintWriter append(final CharSequence csq, final int start, final int end) { + public InternalPrintWriter append(final CharSequence csq, final int start, final int end) { super.append(csq, start, end); return this; } @@ -90,13 +78,13 @@ public class LoggerPrintWriter extends PrintWriter { } @Override - public LoggerPrintWriter format(final Locale l, final String format, final Object... args) { + public InternalPrintWriter format(final Locale l, final String format, final Object... args) { super.format(l, format, args); return this; } @Override - public LoggerPrintWriter format(final String format, final Object... args) { + public InternalPrintWriter format(final String format, final Object... args) { super.format(format, args); return this; } @@ -147,13 +135,13 @@ public class LoggerPrintWriter extends PrintWriter { } @Override - public LoggerPrintWriter printf(final Locale l, final String format, final Object... args) { + public InternalPrintWriter printf(final Locale l, final String format, final Object... args) { super.printf(l, format, args); return this; } @Override - public LoggerPrintWriter printf(final String format, final Object... args) { + public InternalPrintWriter printf(final String format, final Object... args) { super.printf(format, args); return this; } @@ -210,7 +198,7 @@ public class LoggerPrintWriter extends PrintWriter { @Override public String toString() { - return LoggerPrintWriter.class.getSimpleName() + "{stream=" + this.out + '}'; + return "{stream=" + this.out + '}'; } @Override diff --git a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerReader.java b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalReader.java similarity index 82% copy from log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerReader.java copy to log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalReader.java index 265e8e7..40f9fd1 100644 --- a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerReader.java +++ b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalReader.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.logging.log4j.io; +package org.apache.logging.log4j.io.internal; import java.io.FilterReader; import java.io.IOException; @@ -24,24 +24,24 @@ import java.nio.CharBuffer; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.io.CharStreamLogger; import org.apache.logging.log4j.spi.ExtendedLogger; /** - * Logs each line read to a pre-defined level. Can also be configured with a Marker. - * - * @since 2.1 + * Internal class that exists primiarly to allow location calculations to work. + * + * @since 2.12 */ -public class LoggerReader extends FilterReader { - private static final String FQCN = LoggerReader.class.getName(); +public class InternalReader extends FilterReader { private final CharStreamLogger logger; private final String fqcn; - protected LoggerReader(final Reader reader, final ExtendedLogger logger, final String fqcn, final Level level, + public InternalReader(final Reader reader, final ExtendedLogger logger, final String fqcn, final Level level, final Marker marker) { super(reader); this.logger = new CharStreamLogger(logger, level, marker); - this.fqcn = fqcn == null ? FQCN : fqcn; + this.fqcn = fqcn; } @Override @@ -82,6 +82,6 @@ public class LoggerReader extends FilterReader { @Override public String toString() { - return LoggerReader.class.getSimpleName() + "{stream=" + this.in + '}'; + return "{stream=" + this.in + '}'; } } diff --git a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerWriter.java b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalWriter.java similarity index 79% copy from log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerWriter.java copy to log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalWriter.java index 8fba24c..11deeab 100644 --- a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerWriter.java +++ b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/InternalWriter.java @@ -15,30 +15,28 @@ * limitations under the License. */ -package org.apache.logging.log4j.io; +package org.apache.logging.log4j.io.internal; import java.io.IOException; import java.io.Writer; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.io.CharStreamLogger; import org.apache.logging.log4j.spi.ExtendedLogger; /** - * Logs each line written to a pre-defined level. Can also be configured with a Marker. This class provides an interface - * that follows the {@link java.io.Writer} methods in spirit, but doesn't require output to any external writer. - * - * @since 2.1 + * Internal class that exists primiarly to allow location calculations to work. + * @since 2.12 */ -public class LoggerWriter extends Writer { - private static final String FQCN = LoggerWriter.class.getName(); +public class InternalWriter extends Writer { private final CharStreamLogger logger; private final String fqcn; - protected LoggerWriter(final ExtendedLogger logger, final String fqcn, final Level level, final Marker marker) { + public InternalWriter(final ExtendedLogger logger, final String fqcn, final Level level, final Marker marker) { this.logger = new CharStreamLogger(logger, level, marker); - this.fqcn = fqcn == null ? FQCN : fqcn; + this.fqcn = fqcn; } @Override diff --git a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/package-info.java b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/package-info.java new file mode 100644 index 0000000..38f754a --- /dev/null +++ b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/internal/package-info.java @@ -0,0 +1,20 @@ +/* + * 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. + */ +/** + * Internal classes. Should not be used by users. + */ +package org.apache.logging.log4j.io.internal; \ No newline at end of file diff --git a/pom.xml b/pom.xml index 0a2f60d..b003714 100644 --- a/pom.xml +++ b/pom.xml @@ -240,7 +240,7 @@ <!-- Allow Clirr severity to be overriden by the command-line option -DminSeverity=level --> <minSeverity>info</minSeverity> <jctoolsVersion>1.2.1</jctoolsVersion> - <mockitoVersion>2.13.0</mockitoVersion> + <mockitoVersion>2.23.4</mockitoVersion> <argLine>-Xms256m -Xmx1024m</argLine> <javaTargetVersion>1.8</javaTargetVersion> <module.name /> diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 93d9d0b..1a5b09a 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -354,6 +354,9 @@ </action> </release> <release version="2.11.2" date="2018-MM-DD" description="GA Release 2.11.2"> + <action issue="LOG4J2-1570" dev="rgoers" type="fix"> + Logging with a lambda expression with a method call that also logs would cause logs within method call to reference line num and method name of the parent method. + </action> <action issue="LOG4J2-1576" dev="rgoers" type="update"> Switch from CLIRR to RevAPI for detecting API changes. </action>