Как использовать собственный логгер для регистрации журнала входа в систему spring для загрузки

В настоящее время в spring boot 1.3 мы можем только регистрировать журнал доступа к файлу в файловой системе. Есть ли способ фактически использовать собственный регистратор (например, log4j2) для регистрации журнала доступа?

В настоящее время я использую basow с загрузкой spring, но после проверки исходного кода загрузки spring, регистратор ловушек инициализируется DefaultAccessLogReceiver, который записывает в файл. Я хотел бы использовать AccessLogHandler, если это возможно, и не писать веб-фильтр, который регистрирует доступ.

Есть ли простой способ обойти это? (за исключением написания запроса на растяжение)

Ответ 1

Трюк для такого рода жестко закодированных, поэтому не поддающихся настройке проблем заключается в том, чтобы скрыть класс, чтобы выпустить новый с тем же пакетом и именем. Все, что вам нужно сделать, это предоставить log4j на основе DefaultAccessLogReceiver и убедитесь, что это может быть поиск загрузчиком классов до того, как он находится в библиотеке подносов.

package io.undertow.server.handlers.accesslog;

public class DefaultAccessLogReceiver implements AccessLogReceiver {

    public void logMessage(final String message) {
        // TODO: log with log4j
    }
}

Ответ 2

Spring В загрузке нет обязательной регистрации, за исключением API регистрации общедоступных данных, из которых есть много вариантов выбора. Чтобы использовать Logback, вам нужно включить его и некоторые привязки для ведения общедоступных записей в пути к классам. Самый простой способ сделать это - через стартовые поры, которые зависят от spring -boot-startter-logging. Для веб-приложения вам нужен только spring -boot-starter-web, поскольку он зависит от транзитного входа в стартер регистрации. Например, используя Maven:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Spring У загрузки есть абстракция LoggingSystem, которая пытается настроить ведение журнала на основе содержимого пути к классам. Если Logback доступен, это первый выбор.

Spring Boot также поддерживает Log4j или Log4j 2 для регистрации конфигурации, но только если один из них находится в пути к классам. Если вы используете стартовые посты для сборки зависимостей, это означает, что вам нужно исключить Logback, а затем включить выбранную вами версию Log4j. Если вы не используете стартовые поры, вам необходимо предоставить общедоступную информацию (по крайней мере) в дополнение к выбранной вами версии Log4j.

Простейший путь, вероятно, возможен через стартовые помы, хотя для этого требуется некоторое смещение с исключениями, например. в Maven:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j</artifactId>
</dependency>

Чтобы использовать Log4j 2, просто зависеть от spring -boot-starter-log4j2, а не spring -boot-starter-log4j.