【发布时间】:2017-05-23 03:26:43
【问题描述】:
我正在构建一个应用程序(Spring Boot 1.4.2),我想为管理员提供启用 syslog 的选项,但我想避免他/她不得不手动编辑任何配置文件 - 在这种情况下 logstash-spring.xml .
因此,我试图了解如何使用logback-spring.xml 文件作为基线来实现(例如,定义基于文件的日志选项、级别等 - 我不希望管理员更改的设置)并且在运行时提供功能管理员可以在其中添加或更改系统日志附加程序。
我列出了我认为的要求:
- 对 Logger 所做的更改应在 Spring Boot 应用程序重新启动后保留。
- 理想情况下,系统日志服务器信息(名称、端口)保存在我的持久层(H2、休眠)中,但我不确定这是否可能,因为我猜日志框架是在我的持久层之前注入的?李>
- 我要添加的 syslog appender 应该被 root logger 引用,这样我配置日志记录的所有包都会进入 syslog(不确定这是否只是“默认情况下的工作方式”)
我也不知道我是否可以简单地将logback-spring.xml 视为常规XML 对象并使用例如JAXB 来操作该文件并使用Logback 的autoscan 功能来简单地读取新的更改?
我已经定义了一个Logger @Bean:
@Bean
public Logger logger() {
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
// excluded implementation
}
这是由 Spring Boot 提取的,但这让我想到了上面列出的 2 个项目,我不知道我将如何或在哪里存储管理员将提供的 syslog 服务器信息。
更新:
我编写了满足上述 3 个要求的以下内容,但是我希望对实际实现有任何反馈,因为我对 Spring 和 Java 非常陌生。
GitHub repository with implementation - spring-boot-logback-syslog
【问题讨论】:
-
我猜,实现第一个验收标准的唯一方法是在应用程序的每次启动时创建 syslog appender。
标签: spring spring-boot logback slf4j