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文件中禁用警告消息.
| 归档时间: |
|
| 查看次数: |
13179 次 |
| 最近记录: |