【问题标题】:Spring-Boot Logging configuration when deployed as .war部署为 .war 时的 Spring-Boot 日志记录配置
【发布时间】:2014-10-18 21:47:14
【问题描述】:

我有一个简单的 spring-boot 应用程序被打包为能够部署到外部 Tomcat 容器的 .war 文件。我在类路径(/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>

【问题讨论】:

  • 如果你确定找不到spring.log(在你的默认临时目录下面),尝试在启动tomcat时显式设置系统属性LOG_FILE并确保这个目录是可写的(对于Tomcat)。

标签: tomcat war logback spring-boot


【解决方案1】:

我一直在努力解决可能是同一问题的问题 - 记录在单元测试和运行应用程序“main()”方法时工作正常,但在 tomcat 中它完全忽略了我的配置。

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

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

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

解决方案似乎是确保首先设置环境变量,例如(您的 IDE 应该有一个选项 - 在 Intellij 中转到运行 -> 编辑配置 -> 环境变量 -> 输入名称和值来自以下):

set logging.config=classpath:/logback.xml

Spring Boot 将优先使用它而不是来自 Tomcat 的 LOGGING_CONFIG,并且会按预期工作。

然而,到目前为止,我还无法在 application.properties 之类的配置文件中实现这一点,这意味着这是部署到该 Tomcat 实例的所有应用程序的全局设置。

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

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

【讨论】:

  • 哇,我敢打赌,这需要一些追踪。
  • Github 中关于如何处理的一些讨论:github.com/spring-projects/spring-boot/issues/1432.
  • 我遇到了同样的问题(tomcats LOGGING_CONFIG 优先)但是,我仍然希望利用 application.properties 中的 logging.config 设置,该设置指向与默认位置不同的位置(即类路径: logback.xml) 任何可能的解决方法的想法?
  • 你在 IntelliJ 的哪里设置这个?
  • @powder366 我已经更新了我的答案以涵盖这个(从记忆中)
猜你喜欢
  • 2018-01-05
  • 1970-01-01
  • 2015-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-26
  • 2017-11-01
  • 1970-01-01
相关资源
最近更新 更多