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

时间:2014-08-25 17:18:29

标签: 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>

1 个答案:

答案 0 :(得分:26)

我一直在努力解决可能出现同样问题的问题 - 从单元测试和运行应用程序&#39; main()&#39;方法,但在tomcat中它完全忽略了我的配置。

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

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

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

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

set logging.config=classpath:/logback.xml

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

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

编辑:这可能是因为环境变量无论如何都会覆盖本地配置,但在其他所有情况下,这都是你想要的: - (

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