Logback with Spring Boot - 在运行时以编程方式更改配置以添加 Syslog Appender

Logback with Spring Boot - programatically change configuration at runtime to add Syslog Appender

我正在构建一个应用程序 (Spring Boot 1.4.2),我想为管理员提供启用系统日志的选项,但我想避免 him/her 必须手动编辑任何配置文件 - 在本例中为 logstash-spring.xml。 因此,我试图了解如何使用 logback-spring.xml 文件作为基线(例如,定义基于文件的日志选项、级别等 - 我不希望管理员更改的设置)并在此基础上提供功能在管理员可以添加或更改系统日志附加程序的运行时。

我列出了我认为的要求:

  1. 在 Spring 启动应用程序重新启动后,对记录器所做的更改应该会保留。
  2. 理想情况下,系统日志服务器信息(名称、端口)保存在我的持久层(H2、休眠)中,但我不确定这是否可能,因为我猜日志框架是在我的持久层之前注入的?
  3. 我想添加的 syslog appender 应该被 root logger 引用,这样我配置日志记录的所有包都会转到 syslog(不确定这是否只是 "how it works per default")

我也不知道我是否可以简单地将 logback-spring.xml 视为常规 XML 对象并使用例如 JAXB 来操作该文件并使用 Logback 的 autoscan 功能来简单地读入新变化?

我已经定义了一个 Logger @Bean:

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

这是由 Spring Boot 拾取的,但这让我想到了我上面列出的 2 个项目,我不知道如何或在哪里存储管理员将提供的系统日志服务器信息。

更新:

我编写了满足上述 3 个要求的以下内容,但是我将不胜感激任何对实际实施的反馈,因为我对 Spring 和 Java.

还很陌生

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

我设法在我指定的应用程序中使用了我在 my Github repo 中发布的示例,并且我正在根据该回购协议中的实施回答我自己的问题。 请参阅自述文件以了解有关其实现方式的完整详细信息。

更新: 作为 Spring Boot 1.5.1 的一部分,有一个执行器可以在运行时设置日志记录级别:Production Ready Loggers
不一定 100% 与该主题相关,但这是我对实施以及更改系统日志相关设置的要求之一。