带有Logback的AWS Elastic Beanstalk应用程序日志记录 [英] AWS Elastic Beanstalk Application Logging with Logback

查看:90
本文介绍了带有Logback的AWS Elastic Beanstalk应用程序日志记录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

添加了图像(问题看起来好像未写入日志文件)

我正在'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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆