我有一个简单的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 回答
我一直在努力解决可能是同一个问题 - 从单元测试和运行应用程序'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 - >输入名称和值来自下列):
Spring Boot将优先使用Tomcat中的LOGGING_CONFIG,并将按预期工作 .
到目前为止,我无法在像application.properties这样的配置文件中使用它,这意味着这是部署到该Tomcat实例的所有应用程序的全局设置 .
编辑:这将是由于环境变量无论如何覆盖本地配置的事实,在所有其他情况下,但这将是你想要的:-(
编辑2:我可以确认,从Spring Boot 1.1.6开始,这个问题已经解决了 - 它被记录为警告,它将继续使用现有的(和正确的)日志记录配置 . 遗憾的是,您无法在logback.xml文件中禁用警告消息 .