部署为.war时的Spring-Boot Logging配置

elp*_*isu 14 tomcat war logback spring-boot

我有一个简单的spring-boot应用程序打包为.war文件,可以部署到外部Tomcat容器.我在类路径(/ WEB-INF/classes)中有一个logback.xml(下面),但是,当部署到Tomcat时,日志不会写入该文件.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    <logger name="org.springframework.web" level="DEBUG"/>
</configuration>
Run Code Online (Sandbox Code Playgroud)

Pat*_*era 26

我一直在努力解决可能是同一个问题 - 从单元测试和运行应用程序'main()'方法的日志记录工作正常,但在tomcat中它完全忽略了我的配置.

事实证明,在启动时,tomcat设置了一个环境变量"LOGGING_CONFIG"来描述其"logging.properties"文件的位置.这可以在tomcat/bin/catalina.sh或(.bat)中看到.

Spring Boot还会在启动时读取环境,并且作为智能处理配置的一部分,我相信它会将LOGGING_CONFIG转换为'logging.config',这是一个属性,它允许您覆盖其'日志记录配置的位置.

问题是它然后尝试将该值视为文件名并加载它(它实际上不是文件名,而是描述文件的Java系统属性),但它失败了,并且没有正确初始化其日志并继续默认情况下使用Tomcat设置.

解决方案似乎是确保首先设置环境变量,例如(你的IDE应该有一个选项 - 在Intellij中转到Run - > Edit Configurations - > Environment Variables - >输入名称和值来自下列):

set logging.config=classpath:/logback.xml
Run Code Online (Sandbox Code Playgroud)

Spring Boot将优先使用Tomcat中的LOGGING_CONFIG,并将按预期工作.

到目前为止,我无法在像application.properties这样的配置文件中使用它,这意味着这是部署到该Tomcat实例的所有应用程序的全局设置.

编辑:这将是由于环境变量无论如何覆盖本地配置的事实,在所有其他情况下,但这将是你想要的:-(

编辑2:我可以确认,从Spring Boot 1.1.6开始,这个问题已经解决了 - 它被记录为警告,它将继续使用现有的(和正确的)日志记录配置.遗憾的是,您无法在logback.xml文件中禁用警告消息.

  • 哇,我打赌这需要一些追踪. (3认同)
  • 我遇到了同样的问题(tomcats LOGGING_CONFIG 优先)但是,我仍然希望利用 application.properties 中的logging.config设置来指向与默认位置不同的位置(即classpath:logback.xml)任何可能的想法解决方法? (2认同)