我一直在努力解决可能是同样问题的困扰 - 单元测试和运行应用程序“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
相比于Tomcat的LOGGING_CONFIG,Spring Boot将优先使用此设置,并且将按预期工作。
然而,到目前为止,我尝试过无法从类似application.properties这样的配置文件中使其工作,这意味着这是针对部署在该Tomcat实例上的所有应用程序的全局设置。
编辑:这将是由于环境变量会覆盖本地配置,在除此之外的每种情况下都是您想要的 :-(
编辑2:我可以确认,截至Spring Boot 1.1.6,已经解决了此问题-它被记录为警告,并且它将继续使用现有(和正确的)日志记录配置。不幸的是,您无法在logback.xml文件中禁用警告消息本身。
spring.log
文件(在默认的临时目录下),那么尝试在启动 Tomcat 时显式设置系统属性LOG_FILE
,并确保该目录对 Tomcat 是可写的。 - Hille