使用 Logback 进行 AWS Elastic Beanstalk 应用程序日志记录
AWS Elastic Beanstalk Application Logging with Logback
编辑:添加图像(问题看起来像日志文件没有写入)
我是 运行 spring mvc(不是 springboot)WAR 'Tomcat 8.5 with Corretto 11 running on 64bit Amazon Linux 2/4.1.3' 环境中 AWS Elastic Beanstalk 上的文件。
除我用 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/Whosebug 后,我添加了一个带有配置文件的 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 连接到环境。我没有看到 java.log 在文件夹 var/log(或与此相关的任何其他文件夹)下创建。
为什么logback不写日志?该日志路径 /var/log/java.log
不可用吗?
由于 中已接受的答案,我也提出了这个问题。
我想把我从这两个问题中学到的东西结合起来,因为这个问题是关于阅读日志的,而那个问题是关于写日志的,最好能在一个地方有完整的答案。
以下是我对问题中提到的 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 配置文件以指向该位置)。
我花了几天时间终于弄明白了,希望对其他人也有帮助。
P.S。我从我的 logback.xml 中取出 ConsoleAppender
,它什么也没做。
编辑:添加图像(问题看起来像日志文件没有写入)
我是 运行 spring mvc(不是 springboot)WAR 'Tomcat 8.5 with Corretto 11 running on 64bit Amazon Linux 2/4.1.3' 环境中 AWS Elastic Beanstalk 上的文件。
除我用 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/Whosebug 后,我添加了一个带有配置文件的 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 连接到环境。我没有看到 java.log 在文件夹 var/log(或与此相关的任何其他文件夹)下创建。
为什么logback不写日志?该日志路径 /var/log/java.log
不可用吗?
由于
我想把我从这两个问题中学到的东西结合起来,因为这个问题是关于阅读日志的,而那个问题是关于写日志的,最好能在一个地方有完整的答案。
以下是我对问题中提到的 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 配置文件以指向该位置)。
我花了几天时间终于弄明白了,希望对其他人也有帮助。
P.S。我从我的 logback.xml 中取出 ConsoleAppender
,它什么也没做。