This is an automated email from the ASF dual-hosted git repository.

rgoers pushed a commit to branch release-2.x
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git


The following commit(s) were added to refs/heads/release-2.x by this push:
     new dfc9615  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
dfc9615 is described below

commit dfc9615bed6a5354d185892ff1a2ce8e83839186
Author: Ralph Goers <rgo...@apache.org>
AuthorDate: Wed Jan 16 20:59:32 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}              | 21 +++---
 .../InternalBufferedReader.java}                   | 18 ++---
 .../InternalFilterOutputStream.java}               | 19 +++--
 .../InternalFilterWriter.java}                     | 17 +++--
 .../InternalInputStream.java}                      | 16 ++---
 .../InternalLoggerReader.java}                     | 16 ++---
 .../InternalOutputStream.java}                     | 17 ++---
 .../InternalPrintStream.java}                      | 36 +++++-----
 .../InternalPrintWriter.java}                      | 48 +++++--------
 .../InternalReader.java}                           | 16 ++---
 .../InternalWriter.java}                           | 16 ++---
 .../logging/log4j/io/internal/package-info.java    | 20 ++++++
 pom.xml                                            |  2 +-
 src/changes/changes.xml                            |  3 +
 25 files changed, 303 insertions(+), 319 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 f7a7e55..53b3c8d 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,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.InternalBufferedInputStream;
 import org.apache.logging.log4j.spi.ExtendedLogger;
 
 /**
@@ -32,40 +33,44 @@ import org.apache.logging.log4j.spi.ExtendedLogger;
  */
 public class LoggerBufferedInputStream extends BufferedInputStream {
     private static final String FQCN = 
LoggerBufferedInputStream.class.getName();
+    private 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);
+        this.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);
+        this.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 e63f612..0bbc82e 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 d3d476b..4412245 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 d2da1ce..ae27292 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 ee77251..40a8921 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 1267966..e516c65 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 5aa1e82..5c8979a 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 6fb9579..6b15766 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 235d4eb..a5aaef1 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 f7a7e55..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,24 +24,25 @@ 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
@@ -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 75%
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 e63f612..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,20 +27,20 @@ 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
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 d3d476b..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!
+ * Internal class that exists primiarly to allow location calculations to work.
  *
- * @since 2.1
+ * @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 d2da1ce..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.
+ * Internal class that exists primarily to allow location calculation to work.
  *
- * @since 2.1
+ * @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 80%
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 ee77251..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.
+ * Internal class that exists primarily to allow location calculation to work.
  *
- * @since 2.1
+ * @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 6fb9579..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.
+ * Internal class that exists primarily to allow location calculation to work.
  *
- * @since 2.1
+ * @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 1267966..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!
+ * Internal class that exists primarily to allow location calculation to work.
  *
- * @since 2.1
+ * @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 5aa1e82..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!
+ * Internal class used primarily to allow location calculations to work 
properly.
  *
- * @since 2.1
+ * @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 6fb9579..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.
+ * Internal class that exists primiarly to allow location calculations to work.
  *
- * @since 2.1
+ * @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 235d4eb..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 973aa7b..a603b8d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -238,7 +238,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.7</javaTargetVersion>
     <module.name />
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 660f9b4..f5964d7 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -31,6 +31,9 @@
          - "remove" - Removed
     -->
     <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>

Reply via email to