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 并记录到文件