Я создал класс для регистрации запросов (и ответов), полученных API-интерфейсом REST JEE7.
Класс использует SLF4J и logback для создания события журнала в формате JSON, например
{
"timestamp" : "2019-05-14 11:46:40.419",
"level" : "INFO",
"thread" : "default task-5",
"mdc" : {
"request.headers.Connection" : "keep-alive",
"request.headers.Accept" : "*/*",
"request.requestUri" : "http://localhost:8080/play/v1.0/map",
"request.headers.User-Agent" : "PostmanRuntime/7.11.0",
"request.headers.Cache-Control" : "no-cache",
"request.method" : "GET",
"request.headers.accept-encoding" : "gzip, deflate",
"request.headers.Host" : "localhost:8080",
"request.headers.Postman-Token" : "e03c8d8b-ebea-475c-bfaf-0ff8d4646081",
"response.status" : "200",
"message" : "200 GET /play/v1.0/map"
},
"logger" : "javax.ws.rs.container.ContainerRequestFilter",
"message" : "you",
"context" : "default"
}
Проблема в том, что WildFly добавляет свою собственную информацию в журналы, поэтому текущий результат выглядит следующим образом:
11:46:40,420 INFO [stdout] (default task-5) {
11:46:40,420 INFO [stdout] (default task-5) "timestamp" : "2019-05-14 11:46:40.419",
11:46:40,420 INFO [stdout] (default task-5) "level" : "INFO",
11:46:40,420 INFO [stdout] (default task-5) "thread" : "default task-5",
11:46:40,420 INFO [stdout] (default task-5) "mdc" : {
11:46:40,420 INFO [stdout] (default task-5) "request.headers.Connection" : "keep-alive",
11:46:40,421 INFO [stdout] (default task-5) "request.headers.Accept" : "*/*",
11:46:40,421 INFO [stdout] (default task-5) "request.requestUri" : "http://localhost:8080/play/v1.0/map",
11:46:40,421 INFO [stdout] (default task-5) "request.headers.User-Agent" : "PostmanRuntime/7.11.0",
11:46:40,421 INFO [stdout] (default task-5) "request.headers.Cache-Control" : "no-cache",
11:46:40,421 INFO [stdout] (default task-5) "request.method" : "GET",
11:46:40,421 INFO [stdout] (default task-5) "request.headers.accept-encoding" : "gzip, deflate",
11:46:40,421 INFO [stdout] (default task-5) "request.headers.Host" : "localhost:8080",
11:46:40,421 INFO [stdout] (default task-5) "request.headers.Postman-Token" : "e03c8d8b-ebea-475c-bfaf-0ff8d4646081",
11:46:40,421 INFO [stdout] (default task-5) "response.status" : "200",
11:46:40,421 INFO [stdout] (default task-5) "message" : "200 GET /play/v1.0/map"
11:46:40,421 INFO [stdout] (default task-5) },
11:46:40,421 INFO [stdout] (default task-5) "logger" : "javax.ws.rs.container.ContainerRequestFilter",
11:46:40,421 INFO [stdout] (default task-5) "message" : "you",
11:46:40,421 INFO [stdout] (default task-5) "context" : "default"
11:46:40,422 INFO [stdout] (default task-5) }
Я хочу, чтобы мой файл журнала содержал только объект JSON, по одному настрока (вышеприведенные примеры довольно напечатаны для ясности)
В документации по конфигурации ведения журнала WildFly не ясно, как этого добиться.
Может кто-нибудь мне помочь?
РЕДАКТИРОВАТЬ 1
logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">
<contextName>/psp/v1.0</contextName>
<!-- ADD jboss-deployment-structure.xml -->
<!-- WildFly adds slf4j as a default logging dependency. To avoid this exclude the main implementation in jboss-deployment-structure.xml descriptor -->
<!-- don't log logback startup info -->
<statusListener class="ch.qos.logback.core.status.NopStatusListener"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.contrib.json.classic.JsonLayout">
<jsonFormatter
class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter">
<prettyPrint>false</prettyPrint>
</jsonFormatter>
<timestampFormat>yyyy-MM-dd' 'HH:mm:ss.SSS</timestampFormat>
<appendLineSeparator>true</appendLineSeparator>
</layout>
</appender>
<root level="info">
<appender-ref ref="STDOUT"/>
</root>
</configuration>