带有Logback的AWS Elastic Beanstalk应用程序日志记录 [英] AWS Elastic Beanstalk Application Logging with Logback
问题描述
添加了图像(问题看起来好像未写入日志文件)
我正在'Tomcat 8.5上的AWS Elastic Beanstalk上运行spring mvc(NOT springboot)WAR文件,其中Corretto 11在64位Amazon Linux 2/4.1.3上运行.
除我用slf4j/logback编写的应用程序日志外,一切都按预期工作.
以下是我的logback.xml配置文件
<?xml version ="1.0"encoding ="UTF-8"?><!DOCTYPE xml><配置调试=真">< appender name ="STDOUT"class ="ch.qos.logback.core.ConsoleAppender".<编码器>< pattern>%d {yyyy-MM-dd'T'HH:mm:ss.SSSZ} [%thread]%-5level%logger {36}-%msg%n</pattern></encoder></appender>< appender name ="APPLOG"class ="ch.qos.logback.core.rolling.RollingFileAppender">< file>/var/log/java.log</file>< rollingPolicy class ="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">< FileNamePattern>/var/log/java_%d {yyyy-MM-dd} _%i.log</FileNamePattern><!-保留14天的历史记录->< maxHistory> 14</maxHistory>< timeBasedFileNamingAndTriggeringPolicy class ="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><!-或每当文件大小达到10MB时->< maxFileSize> 10MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><编码器>< pattern>%d {yyyy-MM-dd'T'HH:mm:ss.SSSZ} [%thread] [%X {remoteHost}]%-5level%c {1}-%msg%n</pattern><!-< pattern>%d%-5p%c {1}-%m%n</pattern>-></encoder></appender><记录器名称="com.personal.service.layer.mongodb"等级="INFO".可加性=假".< appender-ref ref ="STDOUT";/>< appender-ref ref ="APPLOG";/></logger>< logger name ="org.springframework"等级="INFO".可加性=假".< appender-ref ref ="STDOUT";/>< appender-ref ref ="APPLOG";/></logger><记录器名称="spring.web";等级="INFO".可加性=假".< appender-ref ref ="STDOUT";/>< appender-ref ref ="APPLOG";/></logger><根目录级别="INFO">< appender-ref ref ="STDOUT";/>< appender-ref ref ="APPLOG";/></root></configuration>
在搜索google/stackoverflow之后,我添加了一个ebextensions文件夹和一个配置文件,以将我的日志与尾日志和捆绑包包括在内,如下所示:
文件:"/opt/elasticbeanstalk/tasks/bundlelogs.d/applogs.conf":模式:"000755"所有者:root组:根内容:/var/log/*.log"/opt/elasticbeanstalk/tasks/taillogs.d/applogs.conf":模式:"000755"所有者:root组:根内容:/var/log/*.log
在网上进行了一些研究之后,我尝试了一些其他组合.例如,我尝试将logback.xml中的日志文件设置为/var/app/current/logs/applog.log
,并在conf文件中使用/var/log/current/logs/*.log
,而不是上面显示的内容,但它们也不起作用.因此,我觉得我缺少使用Logback登录到AWS的一些东西.
我也乐于接受有关其他日志记录(log4j,java日志记录等)的(可行的)建议.
最终弄清楚了aws/eb的混乱情况,并且能够对环境进行SSH了.我看不到在var/log文件夹(或与此有关的任何其他文件夹)下创建的java.log.
为什么logback不会写日志?该日志路径/var/log/java.log
不可用吗?
由于
但是,当应用程序与Tomcat一起运行时,它以用户 tomcat
的身份运行,该用户没有写该文件夹的权限.但是,用户 tomcat
有权写入/var/log/tomcat
文件夹.
我发现 tomcat
用户可以访问的另一个文件夹是为应用程序/var/app
创建的文件夹.因此,如果将日志文件位置设置在logback.xml中的该文件夹内,它也可以正常工作(它还需要更新ebextensions配置文件以指向该位置).
我花了几天的时间才终于弄清楚这一点,希望对其他人也有帮助.
P.S.我从logback.xml中取出了 ConsoleAppender
,它什么也没做.
EDIT: Added Image (The problem looks like log files are not written)
I am running an spring mvc (NOT springboot) WAR file on AWS Elastic Beanstalk on a 'Tomcat 8.5 with Corretto 11 running on 64bit Amazon Linux 2/4.1.3' environment.
Everything is working as expected EXCEPT application logs that I write with slf4j/logback.
The following is my logback.xml configuration file
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE xml>
<configuration debug="true">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d{yyyy-MM-dd'T'HH:mm:ss.SSSZ} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<appender name="APPLOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/var/log/java.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>/var/log/java_%d{yyyy-MM-dd}_%i.log</FileNamePattern>
<!-- keep 14 days' worth of history -->
<maxHistory>14</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- or whenever the File size reaches 10MB -->
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSSZ} [%thread][%X{remoteHost}] %-5level %c{1} - %msg%n</pattern>
<!-- <pattern>%d %-5p %c{1} - %m%n</pattern> -->
</encoder>
</appender>
<logger name="com.personal.service.layer.mongodb" level="INFO"
additivity="false">
<appender-ref ref="STDOUT" />
<appender-ref ref="APPLOG" />
</logger>
<logger name="org.springframework" level="INFO"
additivity="false">
<appender-ref ref="STDOUT" />
<appender-ref ref="APPLOG" />
</logger>
<logger name="spring.web" level="INFO" additivity="false">
<appender-ref ref="STDOUT" />
<appender-ref ref="APPLOG" />
</logger>
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="APPLOG" />
</root>
</configuration>
After searching google/stackoverflow, I have added an ebextensions folder with a config file to include my logs with the tail logs and bundle as follows:
files:
"/opt/elasticbeanstalk/tasks/bundlelogs.d/applogs.conf" :
mode: "000755"
owner: root
group: root
content: |
/var/log/*.log
"/opt/elasticbeanstalk/tasks/taillogs.d/applogs.conf" :
mode: "000755"
owner: root
group: root
content: |
/var/log/*.log
After some research online, I have tried some other combinations. For example, I have tried to set the log file in logback.xml as /var/app/current/logs/applog.log
and in the conf files used /var/log/current/logs/*.log
, instead of what is shown above, but they did not work either. So I feel like I am missing something about logging to AWS with Logback.
I am also open to (working) suggestions about logging with other something else (log4j, java logging, etc).
EDIT: Finally figured out the aws/eb mess, and was able to ssh to the environment. I do not see java.log created under the folder var/log (or any other folder to the matter).
Why would logback not be writing the logs? Is that logpath /var/log/java.log
not usable?
This is working for me now, thanks to the accepted answer in Logback with Elastic Beanstalk, which I asked as well.
I want combine what I learned from both questions here because this question is about reading logs where as that question is about writing logs, and it would be nice to have complete answer in one place.
The following are the changes I made to the logback.xml and ebextensions config file as mentioned in the question:
(1) In logback.xml, update <file>/var/log/java.log</file>
to <file>/var/log/tomcat/java.log</file>
(2) In the ebextensions config file, update /var/log/*.log
to /var/log/tomcat/*.log
(this is optional, it will work even if it is left as /var/log/*.log
)
The reason why it was not working in /var/log
folder is because of the permissions to the folder. When I ssh to the folder, I found that the permissions to that folder is limited to root
user only.
However, when the app is running with Tomcat, it is running as the user tomcat
which does not have permission to write to that folder. However, the user tomcat
has permission to write to the /var/log/tomcat
folder.
The another folder I found which the tomcat
user has access to is the folder created for the app /var/app
. So if the log file location is set inside that folder in logback.xml, it would work as well (it would also require updating the ebextensions config file to point to that location).
It took me a couple of days to finally figure this out, hope it will help others as well.
P.S. I took out the ConsoleAppender
from my logback.xml, it was doing nothing.
这篇关于带有Logback的AWS Elastic Beanstalk应用程序日志记录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!