如何在Spring Boot中禁用日志记录的自动配置?

时间:2016-08-30 23:45:04

标签: spring-boot

Spring Boot有一个功能,可以自动检测任何可用的日志框架(基于org.springframework.boot.logging.LoggingSystem.SYSTEMS中列出的类的存在 - Logback,Log4j或JUL),并从应用程序提供的日志配置文件中进行配置或Spring Boot自带的默认配置文件,与Spring Boot本身一起打包。

将Grails 3应用程序作为war文件部署到JBoss EAP 6(a.k.a.WildFly 7)时会出现问题。 当应用程序初始化时,Spring Boot会找到JBoss提供的JUL日志记录实现org.jboss.logmanager.LogManager,并在其上调用readConfiguration()方法,这会弄乱记录配置。

  • 我想继续使用JBoss提供的日志记录实现和JBoss提供的日志记录配置,而不是在war文件中打包单独的日志记录实现。这允许我从服务器的配置文件中配置应用服务器上的所有应用程序。

有没有办法禁用Spring Boot自动配置日志记录?(我可以使用Spring Boot 检测并使用日志记录框架;我只是不希望它尝试配置它。)我查看了源代码,但没有看到任何钩子来控制它。

相关源代码:

可能的想法:

  • 以某种方式从应用程序侦听器列表中删除LoggingApplicationListener,然后才收到ApplicationStartedEventApplicationEnvironmentPreparedEvent事件(触发日志记录配置)?

这些其他相关问题没有解决了我的问题,因为用例不同:

版本:

  • Spring Boot - 1.3.3.RELEASE
  • Grails - 3.1.5

2 个答案:

答案 0 :(得分:5)

在Spring Boot 1.3.x中,您可以编写 ["��id"]=> 的自定义实现,但不执行任何操作,然后将org.springframework.boot.logging.LoggingSystem系统属性设置为自定义实现的完全限定类名。

我是Spring Boot 1.4.x,不需要自定义实现,您只需将org.springframework.boot.logging.LoggingSystem系统属性设置为org.springframework.boot.logging.LoggingSystem即可。

答案 1 :(得分:1)

这不是每个人的答案,但有些线索,你告诉我它是否有帮助:

你看到了吗? How-To Configure Logging for Spring-Boot + JBOSS 7.1 Server

此外,在Spring Boot 1.4中进行了修复(如果它确实为您修复了,您可以选择升级):Spring Boot Logging initialization

我对修复的理解:它延迟了记录器的初始化,允许你以编程方式定义java.util.logging.manager:

System.setProperty("java.util.logging.manager", "org.apache.logging.log4j.jul.LogManager")