You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@logging.apache.org by "Volkan Yazici (Jira)" <ji...@apache.org> on 2021/07/07 06:55:00 UTC

[jira] [Closed] (LOG4J2-3025) log4j2 JsonLayout: In log message, Object is logged as escaped Json

     [ https://issues.apache.org/jira/browse/LOG4J2-3025?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Volkan Yazici closed LOG4J2-3025.
---------------------------------
    Resolution: Not A Problem

> log4j2 JsonLayout: In log message, Object is logged as escaped Json
> -------------------------------------------------------------------
>
>                 Key: LOG4J2-3025
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-3025
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: Layouts
>    Affects Versions: 2.11.2
>            Reporter: Dee Vinci
>            Assignee: Volkan Yazici
>            Priority: Major
>
> Our organization is using log4j2 version 2.11.2 and xml based configuration, also we are using Elk Stack for further log processing.
> We are trying to move from PatternLayout to Json Layout but facing 2 issues:
> 1.) In Json Layout the object logged in message is logged as escaped json, logging just a simple string works fine, also in PatternLayout proper json is logged
> ----
> Log logged in Json Layout:
>   
> {code:java}
>  {code}
>  
> {code:java}
> {   
> "thread" : "http-nio-8080-exec-2",   "level" : "INFO",   "loggerName" : "***testName***.controller.TestController",   "message" : "Logging testDto \{\"name\":\"testName\",\"address\":\"testAddress\",\"age\":24}
> ",
>   "endOfBatch" : false,
>   "loggerFqcn" : "org.apache.logging.log4j.spi.AbstractLogger",
>   "instant" :
> {     "epochSecond" : 1614151230,     "nanoOfSecond" : 315000000   }
> ,
>   "contextMap" :
> {     "testId" : " test-2494503368183"   }
> ,
>   "threadId" : 87,
>   "threadPriority" : 5,
>   "@timestamp" : "2021-02-24T12:50:30.315Z",
>   "testId" : " test-2494503368183"
> }
> {code}
>  
>  
> ----
> Expected message is unescaped json, similar to Pattern Layout
>   
>  
> {code:java}
> Logging testDto {"name":"testName","address":"testAddress","age":24}
> {code}
>  
> ----
> As per docs have used
> {code:java}
> objectMessageAsJsonObject="true"{code}
> in JsonLayout configuration property  but message is still logged as escaped json.
>  
> Logs of Diff level are logged in different files, following is the snippet of configuration of Info Logs.
> ----
>  
>  
> {code:java}
>  <RollingFile name="LOG_INFO" fileName="**filepath**/filename_info.log"
>                      filePattern="**filepath**/filename_info.%d{yyyy-MM-dd}-%i.gz">
>             <LevelRangeFilter minLevel="INFO" maxLevel="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
>  
>             <!-- <PatternLayout pattern="%d{dd/MM/yyyy HH:mm:ss,SSS} %X{testId} %-5p %c{1} - %.-60000m%n" /> -->
>  
>             <JsonLayout complete="true" compact="false" objectMessageAsJsonObject="true" >
>                 <KeyValuePair key="@timestamp" value="$${date:yyyy-MM-dd'T'HH:mm:ss.SSS'Z'}"/>
>                 <KeyValuePair key="testId" value="$${ctx:testId}"/>
>             </JsonLayout>
>             <Policies>
>                 <TimeBasedTriggeringPolicy />
>                 <SizeBasedTriggeringPolicy size="2 GB"/>
>             </Policies>
> </RollingFile> 
>  
> {code}
>  
> Following is how logger is implemented in codebase
>   
> ---------------------------------------------------------------------------------------------------------
>  
> {code:java}
> private Logger LOG = LogManager.getLogger(TestController.class); // declared at class level
> ‘’’
>  
> ‘’’
>  
> TestDto testDto = new TestDto();
> testDto.setName("testName");
> testDto.setAddress("testAddress");
> testDto.setAge(24);
>  
> LOG.info("Logging testDto {}", testDto);
>  
> {code}
>  
> ----
> Structure of TestDto:
>   
> -----------------------------------------------------------------------------------------------------
>  
> {code:java}
> public class TestDto {
>  
>    private String name;
>    private String address;
>    private Integer age;
>  
>    public String getName()
> {        _return_ name;    }
>  
>    public void setName(String name)
> {        _this_.name = name;    }
>  
>    public String getAddress()
> {        _return_ address;    }
>  
>    public void setAddress(String address)
> {        _this_.address = address;    }
>  
>    public Integer getAge()
> {        _return_ age;    }
>  
>    public void setAge(Integer age)
> {        _this_.age = age;    }
>  
>    @Override
>    public String toString()
> {        _return new_ GsonBuilder().setExclusionStrategies(_new_ CustomExclusionStrategy()).create().toJson(_this_);    
> }
> }
> {code}
>  
> 2.) In Pattern Layout while logging, the prefix string of some of the logs was truncated so we had added {{%.-60000m%}} in pattern Layout configuration so that the beginning of log message is not truncated. Do we have a similar plugin or workaround in Json Layout.
> need to resolve this as early as possible so kindly revert in case of any lead or any extra information needed so that we can resolve this
> Thanks.
> stack overflow link of the same:
> [https://stackoverflow.com/questions/66347969/log4j2-jsonlayout-in-log-message-object-is-logged-as-escaped-json]



--
This message was sent by Atlassian Jira
(v8.3.4#803005)