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