WildFly10 войти как JSON - PullRequest
       35

WildFly10 войти как JSON

1 голос
/ 14 мая 2019

Я создал класс для регистрации запросов (и ответов), полученных 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>

1 Ответ

0 голосов
/ 14 мая 2019

Если вы используете logback в качестве бэкенда для регистрации, вы можете настроить его с помощью json appender.

Вам нужно будет добавить эти зависимости в ваш pom.xml:

<dependencies>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.1.7</version>
    </dependency>

    <dependency>
        <groupId>ch.qos.logback.contrib</groupId>
        <artifactId>logback-json-classic</artifactId>
        <version>0.1.5</version>
    </dependency>

    <dependency>
        <groupId>ch.qos.logback.contrib</groupId>
        <artifactId>logback-jackson</artifactId>
        <version>0.1.5</version>
    </dependency>

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.3</version>
    </dependency>
</dependencies>

И затем вы можете добавить аппендер в logback (logback.xml) следующим образом:

<appender name="json" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.contrib.json.classic.JsonLayout">
        <jsonFormatter
            class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter">
            <prettyPrint>true</prettyPrint>
        </jsonFormatter>
        <timestampFormat>yyyy-MM-dd' 'HH:mm:ss.SSS</timestampFormat>
    </layout>
</appender>

<logger name="jsonLogger" level="TRACE">
    <appender-ref ref="json" />
</logger>
...