SLF4J Фильтр сообщений журнала по маркерам - PullRequest
0 голосов
/ 23 мая 2019

Я использую Spring Boot и Slf4j в моем приложении. Мне нужно регистрировать конкретные события аудита. Аудит с помощью JPA, Hibernate или Spring Data JPA не соответствует моим потребностям, так как я хочу записывать аудит уровня обслуживания вместо БД. Итак, я решил использовать маркеры с регистраторами, а затем сохранить их в БД.

Однако, как я могу прервать все сообщения журнала и отфильтровать те, которые имеют мои маркеры аудита? В общем, они должны быть также зарегистрированы в файле, как и без маркеров.

1 Ответ

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

База данных Appender

Spring использует Logback в качестве базовой структуры журнала.

Вы можете создать файл logback-spring.xml в src/resources и затем настроить регистратор. По умолчанию есть приложение FILE, и вы можете добавить приложение DATABASE

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>

    <springProperty name="spring.datasource.driverClassName" source="spring.datasource.driverClassName"/>
    <springProperty name="spring.datasource.url" source="spring.datasource.url"/>
    <springProperty name="spring.datasource.username" source="spring.datasource.username"/>
    <springProperty name="spring.datasource.password" source="spring.datasource.password"/>

    <appender name="DATABASE" class="ch.qos.logback.classic.db.DBAppender">
        <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
            <driverClass>${spring.datasource.driverClassName}</driverClass>
            <url>${spring.datasource.url}</url>
            <user>${spring.datasource.username}</user>
            <password>${spring.datasource.password}</password>
        </connectionSource>
    </appender>

    <logger name="AUDIT" level="INFO">
        <appender-ref ref="FILE"/>
        <appender-ref ref="DATABASE"/>
    </logger>
 </configuration>

Дополнительная информация

Вы можете использовать сопоставленный диагностический контекст (MDC) для хранения глобальной информации, которую вы хотите добавить к каждой записи журнала:

MDC.put("username", SecurityContextHolder.getContext().getAuthentication().getName());

Чтобы иметь его в выводе, вы должны добавить его в шаблон журнала. Например:

<Pattern>%X{username} - %m%n</Pattern>

Дополнительная литература

Рекомендую прочитать руководство по выходу из системы, чтобы получить больше информации об appenders и MDC:

https://logback.qos.ch/manual/mdc.html

...