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)