I am trying to pretty print my restTemplate request and response in pretty print JSON format in the log file using below:
public static RestTemplate createNewRestTemplateWithLogging() {
        ClientHttpRequestInterceptor interceptor = new RestLoggingInterceptor();
        List<ClientHttpRequestInterceptor> interceptorList = new ArrayList<ClientHttpRequestInterceptor>();
        RestTemplate restTemplate = new RestTemplate();
        interceptorList.add(interceptor);
        restTemplate.setInterceptors(interceptorList);
        restTemplate.setRequestFactory(new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory()));
        return restTemplate;
        
    }
The log4j2.xml looks like this:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <RollingFile name="rest_messages_file_appender" fileName="servers/AdminServer/logs/abc.log"
            filePattern="servers/AdminServer/logs/abc-%i.log.gz">
            <LevelRangeFilter maxLevel="INFO" />
            <PatternLayout>
                <Pattern>%d{DEFAULT} %-5p [%c{1}] [%X{hostName}] [%X{transactionId}]
                    [%X{uuid}|%X{username}|%X{caseNum}]:
                    %replace{%msg}{(\r|\n|\r\n)+}{}%n</Pattern>
            </PatternLayout>
            <Policies>
                <SizeBasedTriggeringPolicy size="10MB" />
            </Policies>
            <DefaultRolloverStrategy max="30" />
        </RollingFile>
        <Console name="STDOUT" target="SYSTEM_OUT">
            <PatternLayout pattern="%m%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Logger
            name="com.accenture.apsp.architecture.rest.log.interceptor.RestLoggingInterceptor"
            level="INFO" additivity="false">
            <AppenderRef ref="rest_messages_file_appender" />
        </Logger>
        <Root level="INFO">
            <AppenderRef ref="rest_messages_file_appender" />
            <AppenderRef ref="STDOUT"/>
        </Root>
    </Loggers>
</Configuration> 
I used tag as well but still its not working.
It is displaying as below for any JSON:
Outbound Message----------------------------Direction: OUTAddress: http://apsp-opa:7017/opa/determinations-server/batch/auth?grant_type=client_credentials&client_id=rulescompuser&client_secret=Welcome@99Headers: [Accept:"application/json, application/*+json", Content-Type:"application/json", Content-Length:"2"]Total Time (ms): 14Request Time: 2021-06-23 06:56:05,613Request Payload: {}Response Time: 2021-06-23 06:56:05,627Response Payload: {"access_token":"f541be05-580e-123c-c43a-ca4e0ee567bc","token_type":"Bearer","expires_in":1800}----------------------------
Is there a way/pattern to print a formatted JSON for Response Payload in log4j2.xml .
/**
 * 
 * @param response
 * @param wsLoggingContext
 */
public void logResponse(ClientHttpResponse response, LoggingContext wsLoggingContext) {
    try {
        wsLoggingContext.setResponseTime(new Date());
        wsLoggingContext.setResponseJson(StreamUtils.copyToString(response.getBody(), Charset.defaultCharset()));
    
    } catch (Exception e) {
        REST_LOGGER.info("Error occured while logging" + e);
    }
}
How can we pretty print the request and response payload.
 
    