파이널 프로젝트 배포 4 - logback

mjjin·2023년 10월 19일
0

배포가 끝난 뒤, 곰곰히 생각해보다가 한 가지 문제점을 발견했다.
바로 log!

실행 중일때에는 docker logs <name>으로 확인할 수 있다지만
매번 사람이 직접 로그를 확인 할 수는 없다.

현재 우리는 EC2 -> nginx -> docker(blue/green)
환경에서 서비스를 배포하고 있다.

배포한 것은 좋지만
우리는 아직 완벽한 서비스를 만든것이 아니다.

물론, 모든 서비스가 완벽해 컨테이너가 죽지(?) 않는다면 좋겠지만
컨테이너는 언제 어디서 어떻게 개복치처럼 죽을 지 알 수 없다.

도커는 실행 종료시 해당 컨테이너가 가지고 있던 볼륨을 없앤다.
단, 마운트 된 볼륨은 컨테이너가 종료되더라도 지워지지 않는다.

그 점을 이용해 로그를 쌓아보려고 한다.

필요 과정은 이렇다.

  1. 스프링부트내에서 logback로 로그를 파일로 저장하도록 설정할 것
  2. docker-compose시 log 볼륨을 호스트 볼륨과 바인딩 할 것

1. 스프링부트 logback

스프링부트 프로젝트 내 resources > logback-spring.xml 파일을 생성한다.
우리는 개발 서버와는 다르게 실제 배포 환경에서는 중요한 부분만 남기고자
log 레벨을 WARN으로 진행하기로 했다.

또한, log file의 History는 10일로 잡아두었다.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>

    <appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/quizpop.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logs/quizpop.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>10</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="WARN">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="ROLLING_FILE" />
    </root>

    <root level="WARN">
        <appender-ref ref="CONSOLE" />
    </root>
</configuration>

스프링부트를 실행하면 logs 폴더 밑에 로그 파일들이 생기게 된다.
이제 log 파일이 도커 종료시에도 유지될 수 있도록
호스트와 볼륨을 매핑해준다.

2. docker-compose 파일 수정

기존에 작성되었던 docker-compose(blue / green) 파일에
내가 log파일을 보관하고자 하는 ec2 인스턴스 내 경로를 작성해준다.

volumes:
 - /home/ubuntu/app/logs:/logs

이제 docker compose down을 하더라도 해당 로그파일은 지워지지 않고,
보관되게 된다.


0개의 댓글