Как использовать собственный логгер для регистрации журнала входа в систему 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.