2017-01-08 9 views
2

Я создаю приложение (Spring Boot 1.4.2), где я хотел бы предложить администратору возможность включить syslog, но я хочу избежать его/ее необходимо вручную отредактировать любые файлы конфигурации - в этом случае logstash-spring.xml. Поэтому я пытаюсь понять, как я могу добиться использования файла logback-spring.xml в качестве базовой линии (например, определить параметры журнала на основе файлов, уровни и т. Д. - настройки, которые я не хочу, чтобы администратор менял), и, кроме того, они обеспечивают функциональность во время выполнения, администратор может добавить или изменить приложение syslog.Logback with Spring Boot - программно изменить конфигурацию во время выполнения, чтобы добавить Syslog Appender

я перечислил то, что я вижу, как требования:

  1. Изменение, внесенное в Logger должно быть сохранен после того, как приложение Spring загрузки перезапуска.
  2. В идеале информация сервера syslog (имя, порт) хранится в моем уровне персистентности (H2, hibernate), но я не уверен, что это возможно, так как я предполагаю, что кадровая система вводится до моего уровня персистентности?
  3. системного журнала Appender, что я хочу, чтобы добавить должна быть ссылка на корневой регистратор, так что все пакеты я настроившие протоколирования бы в системный журнал (не уверен, если это просто «как он работает по умолчанию»)

Также я не знаю, могу ли я просто обрабатывать logback-spring.xml в качестве обычного объекта XML и использовать, например, JAXB для управления этим файлом и использовать функцию резервного копирования autoscan для простого чтения в новых изменениях?

Я играл с определением Logger@Bean:

@Bean 
public Logger logger() { 
    LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); 
    // excluded implementation 
} 

Это время подобрано Spring ботинком, но это подводит меня к 2 пунктам я перечислил выше, что я не знаю, как и где я бы сохраните информацию сервера syslog, которую предоставит администратор.

UPDATE:

я написал следующее, который отвечает требованиям 3 выше, однако я был бы признателен за любую обратную связь о фактической реализации, как я очень новой для Spring и Java.

GitHub repository with implementation - spring-boot-logback-syslog

+0

Я предполагаю, что единственный способ достичь первых критериев приемки - создать сборщик syslog при каждом запуске приложения. –

ответ

1

мне удалось использовать пример я писал в my Github repo в моем обозначенном приложении, и с этим я ответить на мои собственные вопросы на основе реализации в этом репо. Для получения подробной информации о том, как это было реализовано, обратитесь к README.

UPDATE: Как часть Spring ботинке 1.5.1 есть привод, который может установить уровень ведения журнала во время выполнения: Production Ready Loggers
не обязательно 100% по отношению к этой теме, но это был один из требований я имел для реализации, а также изменения параметров, связанных с syslog.