AWS Elastic Beanstalk 上的 Spring Boot 并记录到文件

Posted

技术标签:

【中文标题】AWS Elastic Beanstalk 上的 Spring Boot 并记录到文件【英文标题】:Spring Boot on AWS Elastic Beanstalk and logging to a file 【发布时间】:2020-11-26 05:23:03 【问题描述】:

我一直在寻找一种在开发过程中查看 Beanstalk 上的调试语句的简单方法。我以为我可以简单地登录到 Beanstalk 上的文件。

在我设置的 application.properties 文件中

logging.file.path=/var/log

即使在我的本地机器上也没有产生任何结果。我不确定这是权限问题还是什么,但我在本地设置了主目录的路径,然后我看到文件 spring.log 出现了。

对于 Beanstalk,我尝试了 /var/log、var/log/tomcat、/home/webapp/、./、~ 和其他各种值。没有任何效果。

我什至尝试了这里的建议但没有运气:https://medium.com/vividcode/logging-practice-for-elastic-beanstalk-java-apps-308ed7c4d63f

如果记录到文件不是一个好主意,还有哪些替代方法?我在 Google 上搜索了很多关于这个问题的答案,但所有答案都不是很清楚。

【问题讨论】:

【参考方案1】:

是的,这是权限问题。您的应用程序在 webapp 用户下运行,而 /var/log 由 root 拥有。因此你不能写它。

添加日志文件以被 EB 识别的正确方法是通过配置文件。

具体来说,假设 Amazon Linux 2,您可以使用以下内容创建 .ebextensions/mylogfiles.config

files: 
  "/opt/elasticbeanstalk/config/private/logtasks/bundle/myapplogs.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
       /var/app/current/log/*.log

显然,/var/app/current/log/*.log 将指向您的应用程序存储其日志文件的位置。 /var/app/current 是您应用的主文件夹。

【讨论】:

嗨。我也试过 /home/webapp ,但没有奏效。应该是?在任何情况下,我都无法根据需要将 .ebextensions 文件夹添加到我的 Spring Boot War 包的根目录中。我用谷歌搜索了它,有很多不同的解决方案,但它们似乎都已经过时了。没有一个对我有用。你有这方面的知识吗?我正在使用 Maven @ChrisLam 您可以将日志存储在/home/webapp,但您需要使用配置文件告诉 EB 在那里查找日志。现在,手动进行。 SSH 进入 EB 实例,创建日志配置文件,并验证它是否有效。然后你就可以担心如何自动化这个过程了。 当我询问 /home/webapp 时,我指的是当我将 logging.file.path 设置到那里时......而不使用 ebextensions。无论如何,我按照你的建议使用了 ebextensions,我发现使用 Maven 将它放在 WAR 的根目录中的最简单方法是将 .ebextensions 放在 /src/main/webapp 文件夹中(而不是像许多人声称的 src/main/resources 文件夹)。 @ChrisLam 感谢您告诉我。成功了吗? 好的。所以我之前很困惑。 ebextensions 只是告诉 EB 在 /var/app/current/log/*.log 中查找日志文件并将其包含在 EB 控制台的日志部分中。它实际上并没有为我写日志。所以我只是设置了logging.file.path=/var/app/current/log 的路径,瞧……我正在获取日志。非常感谢!

以上是关于AWS Elastic Beanstalk 上的 Spring Boot 并记录到文件的主要内容,如果未能解决你的问题,请参考以下文章

如何避免 AWS Elastic Beanstalk 上的 TooManyApplicationVersion 异常?

反应:AWS Elastic Beanstalk 上的 502 错误网关

AWS Elastic Beanstalk 上的 Wordpress

AWS Elastic Beanstalk 上的 Spring Boot 并记录到文件

AWS Elastic Beanstalk 上的 Django manage.py

如何获取命令以从 Elastic Beanstalk 上的 Dockerfile.aws.json 运行?