Logback을 사용한 AWS Elastic Beanstalk 애플리케이션 로깅

Nov 26 2020

편집 : 이미지 추가 (문제는 로그 파일이 작성되지 않은 것 같습니다)

'64 비트 Amazon Linux 2 / 4.1.3에서 실행되는 Corretto 11이 포함 된 Tomcat 8.5 '환경의 AWS Elastic Beanstalk에서 spring mvc (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, 자바 로깅 등) 로깅에 대한 (작업) 제안에 열려 있습니다.

편집 : 마침내 aws / eb 엉망을 파악하고 환경에 ssh 할 수있었습니다. var / log 폴더 (또는 문제에 대한 다른 폴더) 아래에 생성 된 java.log가 표시되지 않습니다.

로그 백이 로그를 작성하지 않는 이유는 무엇입니까? 그 logpath /var/log/java.log를 사용할 수 없습니까?

답변

TonyScott Nov 28 2020 at 03:05

Logback with Elastic Beanstalk 에서 받아 들인 답변 덕분에 현재 저에게 효과적입니다.

이 질문은 로그 작성에 관한 것이기 때문에이 질문은 로그를 읽는 것에 관한 것이기 때문에 여기서 두 가지 질문에서 배운 것을 결합하고 싶습니다. 한곳에서 완전한 답변을 얻는 것이 좋을 것입니다.

다음은 질문에서 언급 한대로 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 구성 파일을 업데이트해야 함).

마침내 이것을 알아내는 데 며칠이 걸렸습니다. 다른 사람들에게도 도움이되기를 바랍니다.

추신 ConsoleAppender: 내 logback.xml에서 꺼내서 아무것도하지 않았습니다.