【问题标题】:Spring Boot log file not being created未创建 Spring Boot 日志文件
【发布时间】:2018-05-04 19:22:21
【问题描述】:

我有一个 Spring Boot 应用程序 (1.5.10.RELEASE),它在 Eclipse IDE 中作为独立应用程序运行时记录良好。我正在使用spring config,属性文件是这样说的:

logging.level.com.myco.impl=DEBUG
logging.path=/log/myService

当我作为独立应用程序运行时,我看到我看到的所有内容都记录到控制台和上述目录中的文件(称为 spring.log)。

然后我构建我的“uber jar”并像这样运行:

java -jar my-service-0.1.0.jar。我看到所有控制台日志记录就像在 IDE 中运行一样。我可以看到它在 spring config 中寻找我的配置,但我没有看到任何创建的日志文件。

我可以就看什么提出一些想法。

【问题讨论】:

  • logging.path 是否有适当的权限?该目录是否存在?

标签: spring-boot logging


【解决方案1】:

简而言之-我(几乎:-))认为您没有在 cmets 中指出的日志记录路径上设置适当的权限。日志记录配置看起来很简单,并在here 中进行了描述。你不能轻易弄错这些,而且你的看起来还不错。

棘手的部分是如何诊断确切的问题。例如,在我的系统上,如果我更改日志目录的所有者,我可以使用您描述的 uber jar 重现该行为。

接下来 - 我想我们都使用 slf4j 和 logback(例如,因为 spring-boot-starter 而出现)。了解问题的最懒惰和最快的方法是打印logback 状态消息,如here 所述。例如 - 以编程方式 - 还有其他选项,但我会选择最脏的:-)。把它放在你的代码中:

LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
// print logback's internal status
StatusPrinter.print(lc);

LOGGER.debug("Some other message");

如果我在示例应用程序(启动 1.5.10.RELEASE)中执行此操作,我可以立即在控制台中看到打印的问题以及更多状态消息:

23:23:07,857 |-ERROR in ch.qos.logback.core.rolling.RollingFileAppender[FILE] - openFile(/tmp/so/spring.log,true) call failed. java.io.FileNotFoundException: /tmp/so/spring.log (Permission denied)
    at java.io.FileNotFoundException: /tmp/so/spring.log (Permission denied)

【讨论】:

  • 感谢@Lachezar Belev。我添加了上面的代码。当我在 IDE 之外运行时,它正在寻找 logback.xml 而没有找到它,这已经足够有趣了。这应该没问题,因为我希望我的配置带有属性文件条目(所以我们可以在配置服务器中动态更改它)。但它似乎不尊重来自配置服务器的属性文件设置。但在 IDE 中运行时确实如此。在 IDE 中运行时,我根本看不到这些消息(找不到资源 [logback.xml])。奇怪吗?
  • 您是否在 IDE 运行配置中设置了某种环境变量,例如LOGGING_CONFIG?也许您可以从应用程序内部(IDE 内部和外部)打印环境变量和日志记录属性并进行比较?与 spring cloud 集成肯定会有所作为,因为我已经在单个应用程序中尝试了所有属性并且它们按预期工作......或者您可以使用更多详细信息更新问题......
  • 感谢您的帮助。我想通了,但我花了几个小时下载源代码才能理解其中的区别。问题是我从一个 Maven 生成的项目开始,这就是我在 IDE 中运行的项目。然后我使用初始化器创建了 gradle 版本。创建 gradle 版本时,我选择了云配置客户端,但没有选择云引导。除了这个日志记录之外,它大部分都有效。事实证明,如果使用云配置,云引导程序内部有一个类会再次设置记录器。
  • 更多信息。重新初始化的类是 org.springframework.cloud.bootstrap.config 中的 PropertySourceBootstrapConfiguration。特别是 reinitializeLoggingSystem(environment, logConfig, logFile);
  • @LachezarBalev 感谢您的评论!我在权限被拒绝时遇到了完全相同的问题。太糟糕了,您需要添加额外的代码才能看到错误...无论如何,要修复权限被拒绝只需添加chmod o+w file_name,它应该很好
【解决方案2】:

参见上面的 cmets。我没有包含一个我需要的 jar,它对于在联系 Spring Cloud 后重新初始化日志系统至关重要。

【讨论】:

    【解决方案3】:

    该问题可能是 Spring Boot 1.5.10 中的错误,请参阅: https://github.com/spring-projects/spring-boot/issues/11951 当应用程序无法运行时,我遇到了类似的问题,因为日志文件归 root 用户所有,应用程序用户无法更改。 尝试将 Spring Boot 升级到 1.5.11 -- 此版本已修复问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-08
      • 2019-01-10
      • 1970-01-01
      • 2019-02-09
      • 1970-01-01
      • 2016-12-30
      相关资源
      最近更新 更多