[ 
https://issues.apache.org/jira/browse/LOG4J2-3025?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17289953#comment-17289953
 ] 

Dee Vinci commented on LOG4J2-3025:
-----------------------------------

[~vy] okay
let me explore JsonTemplateLayout once..

Thanks for the nice suggestions:)

> 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)

Reply via email to