首页 文章

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

提问于
浏览
14

我有一个简单的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 回答

  • 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
    

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

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

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

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

相关问题