Как настроить или удалить атрибуты по умолчанию в Log4j2 — JSON Layout

В приложении Spring Boot 2 я настроил Log4j2 с JsonLayout, как показано ниже.

    ....

    <Appenders>
        <Console name="ConsoleJSONAppender" target="SYSTEM_OUT">
            <JsonLayout complete="false" compact="false">
            </JsonLayout>
        </Console>
    </Appenders> 
    <Logger name="CONSOLE_JSON_APPENDER" level="INFO" additivity="false">
        <AppenderRef ref="ConsoleJSONAppender" />
    </Logger>

    .....

и я получил вывод, как показано ниже

    {
            "timeMillis" : 1496306649058,
            "thread" : "main",
            "level" : "INFO",
            "loggerName" : "ConsoleJSONAppender",
            "message" : "Json Message",
            "endOfBatch" : false,
            "loggerFqcn" : "org.apache.logging.log4j.spi.AbstractLogger",
            "threadId" : 1,
            "threadPriority" : 5
    }

Вывод в порядке, но мне не нужны такие атрибуты, как "endofBatch", "threadPriority" и другие, но они отображаются в журналах, как избегайте нежелательных атрибутов (по умолчанию) в журналах на основе JsonLayout.


person Ravi kumar    schedule 05.05.2020    source источник
comment
тот же вопрос: stackoverflow.com/questions/24652128/   -  person HungNM2    schedule 27.06.2021


Ответы (1)


Если вы хотите регистрировать только level и loggerName, настройте, как показано ниже, в файле конфигурации.

...
<PatternLayout>
    <pattern>{"level":"%p","loggerName":"%c"}</pattern>
</PatternLayout>
...

Этот параметр описан в здесь. Найдите Patterns в Pattern Layout.

person Han    schedule 05.05.2020
comment
спасибо, решение получает структуру JSON с помощью PatternLayout, но есть ли возможность определить требуемый атрибут или удалить нежелательный атрибут с помощью JsonLayout ? - person Ravi kumar; 06.05.2020
comment
@Ravikumar Вы можете определить <pattern>define here</pattern>, я прикрепил ссылку к своему ответу. Параметры описаны здесь. Найдите шаблоны в макете шаблона. - person Han; 06.05.2020
comment
ваше решение совершенно нормальное, поэтому я получаю журналы в формате JSON. Но здесь мы используем pattern внутри PatterLayout, чтобы привести формат JSON в журналы, это совершенно нормально. Но Slf4j2 по умолчанию поддерживает формат JSON в JsonLayout с такими атрибутами по умолчанию, как timeMillis, endOfBatch и т. д. Итак, как мы можем ограничить/удалить атрибуты по умолчанию в JsonLayout. Так возможно ли это с JsonLayout?. - person Ravi kumar; 06.05.2020
comment
@Ravikumar В моем случае я использую только <PatternLayout><pattern>...</pattern></PatternLayout> и хорошо печатаю журнал. <pattern>{"level":"%p","loggerName":"%c"}</pattern> распечатать {"level":"INFO","loggerName":"com.test.LogTest"} - person Han; 06.05.2020
comment
@Ravikumar Удачи! - person Han; 07.05.2020