You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@logging.apache.org by "Kostiantyn Shchepanovskyi (JIRA)" <ji...@apache.org> on 2017/09/05 14:44:00 UTC

[jira] [Created] (LOG4J2-2032) Curly braces in parameters are treated as placeholders

Kostiantyn Shchepanovskyi created LOG4J2-2032:
-------------------------------------------------

             Summary: Curly braces in parameters are treated as placeholders
                 Key: LOG4J2-2032
                 URL: https://issues.apache.org/jira/browse/LOG4J2-2032
             Project: Log4j 2
          Issue Type: Bug
          Components: Layouts
    Affects Versions: 2.9.0, 2.8.2
         Environment: 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)
            Reporter: Kostiantyn Shchepanovskyi


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:

{code:xml}
<?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>
{code}

Test:

{code:java}
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{}");
    }
}
{code}

Expected output:

{code}
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]
{code}

Actual output:

{code}
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]
{code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)