Hello log4j group, I think we've found a bug... When using JsonLayout for our appender in 2.11.0, an object that has "{}" in its toString will result in a recursive output. Here is a simple code example and resulting output to illustrate the problem:
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class Test { public static final Logger log = LogManager.getLogger(Test.class); public static void main(final String[] args) { log.info("Testing: {}", new TestObj()); } static class TestObj { @Override public String toString() { return "This is my toString {} with curly braces"; } } } This produces the following output: [ { "thread" : "main", "level" : "INFO", "loggerName" : "Test", "message" : "Testing: This is my toString This is my toString {} with curly braces with curly braces", "endOfBatch" : false, "loggerFqcn" : "org.apache.logging.log4j.spi.AbstractLogger", "instant" : { "epochSecond" : 1527636365, "nanoOfSecond" : 40000000 }, "contextMap" : { }, "threadId" : 1, "threadPriority" : 5 } ] Note how TestObj's toString is inserted in place of its "{}", resulting in it (sort-of) being logged twice. Is this a known issue? Thanks! Joseph Husby