Uploaded image for project: 'Log4j 2'
  1. Log4j 2
  2. LOG4J2-2032

Curly braces in parameters are treated as placeholders

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 2.8.2, 2.9.0, 2.10.0
    • 2.11.1, 3.0.0
    • Appenders, Layouts
    • None
    • Tested on Windows and Linux.

      java version "1.8.0_144"
      Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
      Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)

    • Important

    Description

      When logging event parameter contains two consecutive opening and closing curly braces - for example {} in the middle of parameter, they are treated as a placeholder and are substituted by provided parameters starting from index zero.

      I suspect that it affects only async loggers.

      My configuration:

      <?xml version="1.0" encoding="UTF-8"?>
      <Configuration>
          <Appenders>
              <Console name="console" target="SYSTEM_OUT">
                  <PatternLayout>
                      <pattern>%level{length=1} %date{MMdd-HHmm:ss,SSS} %logger{1.} %message %X [%thread]%n
                      </pattern>
                  </PatternLayout>
              </Console>
              <Async name="asyncFile">
                  <AppenderRef ref="console"/>
              </Async>
          </Appenders>
          <Loggers>
              <Root level="info">
                  <AppenderRef ref="asyncFile"/>
              </Root>
          </Loggers>
      </Configuration>
      

      Test:

      package com.playtech.live.platform.core.service;
      
      import org.junit.jupiter.api.Test;
      import org.slf4j.Logger;
      import org.slf4j.LoggerFactory;
      
      public class Log4jCurlyBracesInParameterTest {
      
          private static final Logger LOGGER = LoggerFactory.getLogger(Log4jCurlyBracesInParameterTest.class);
      
          @Test
          void messageWithCurlyBracesInParameter() {
              LOGGER.info("Text containing curly braces: {}", "Curly{}");
              LOGGER.info("Normal text: {}, text containing curly braces {}", "Normal", "Curly{}");
          }
      }
      

      Expected output:

      I 0905-1731:01,018 c.p.l.p.c.s.Log4jCurlyBracesInParameterTest Text containing curly braces: Curly{} {} [main]
      I 0905-1731:01,033 c.p.l.p.c.s.Log4jCurlyBracesInParameterTest Normal text: Normal, text containing curly braces Curly{} {} [main]
      

      Actual output:

      I 0905-1731:01,018 c.p.l.p.c.s.Log4jCurlyBracesInParameterTest Text containing curly braces: CurlyCurly{} {} [main]
      I 0905-1731:01,033 c.p.l.p.c.s.Log4jCurlyBracesInParameterTest Normal text: Normal, text containing curly braces CurlyNormal {} [main]
      

      Attachments

        Issue Links

          Activity

            People

              ckozak Carter Kozak
              kshchepanovskyi Kostiantyn Shchepanovskyi
              Votes:
              1 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: