logging-log4j-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Husby, Joseph P." <Joseph.P.Hu...@leidos.com>
Subject Recursive logging issue with curly braces in JSONLayout Object's toString()
Date Tue, 29 May 2018 23:36:44 GMT
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


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message