Warm tip: This article is reproduced from serverfault.com, please click

java-带有Logback的AWS Elastic Beanstalk应用程序日志记录

(java - AWS Elastic Beanstalk Application Logging with Logback)

发布于 2020-11-26 07:37:50

编辑:添加的图像(问题似乎没有写入日志文件)

我在“ Tomcat 8.5上,在64位Amazon Linux 2 / 4.1.3上运行Corretto 11的环境”上的AWS Elastic Beanstalk上运行spring mvc(NOT springboot)WAR文件。

除了我用slf4j / logback编写的应用程序日志外,一切都按预期工作。

以下是我的logback.xml配置文件

<?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>

搜索google / stackoverflow之后,我添加了一个带有配置文件的ebextensions文件夹,以将我的日志与尾日志和捆绑包包括在内,如下所示:

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

在网上进行了一些研究之后,我尝试了一些其他组合。例如,我尝试将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。

为什么注销不写日志?该日志路径/var/log/java.log不可用吗?

在此处输入图片说明

Questioner
Tony Scott
Viewed
22
Tony Scott 2020-11-28 11:05:01

这也对我来说很有效,这也要归功于我在“使用Elastic Beanstalk进行Logback ”中接受的答案

我想结合我从这两个问题中学到的知识,因为这个问题是关于读取日志的,而这个问题是关于编写日志的,那么将一个完整的答案放在一个地方会很好。

以下是我对问题中提到的logback.xml和ebextensions配置文件所做的更改:

(1)在logback.xml中,更新<file>/var/log/java.log</file><file>/var/log/tomcat/java.log</file>

(2)在ebextensions配置文件中,更新/var/log/*.log/var/log/tomcat/*.log(这是可选的,即使将其保留为,它也将起作用/var/log/*.log

它不能在/var/log文件夹中工作的原因是由于对该文件夹的权限。SSH到该文件夹​​时,我发现该文件夹的权限仅限于root用户。

在此处输入图片说明

但是,当应用程序与Tomcat一起运行时,它tomcat以没有写该文件夹权限的用户身份运行但是,用户tomcat有权写入该/var/log/tomcat文件夹。

在此处输入图片说明

我发现tomcat用户可以访问的另一个文件夹是为该应用程序创建的文件夹/var/app因此,如果在logback.xml中的该文件夹内设置了日志文件位置,它也将起作用(它还需要更新ebextensions配置文件以指向该位置)。

我花了几天的时间终于弄清楚了这一点,希望对其他人也有帮助。

PS我ConsoleAppender从我的logback.xml中取出了,它什么也没做。