백엔드에 처음 입문했을 당시, 당시 상용배포한 프로젝트가 핑테스트 결과 서버는 동작중인데, api요청이 먹통으로 에러원인을 찾느라 고생했던 경험이 있다.
그 때 이후로 백엔드 개발에서 항상 관리하는 사항으로 로그를 확인하는 과정을 구체화시키게 되었다. Logback 라이브러리를 활용해선 로그 파일을 저장하고, 추후 Sentry로 Exception을 전송시킬 예정이다. EC2 디스크의 용량은 한계가 있다보니 RollingFileAppender로 3일 주기로 로그 파일을 삭제하게 진행하려고 한다. 로컬에서 개발할 때 콘솔 로그는 확인을 해야하니 Appender를 Console과 File 두개를 작성해서 xml 파일을 완성하려고 한다.
현재 EC2에서 JAR가 돌고 있기 때문에 CICD가 진행될 때마다 새로운 컨테이너가 열리게 된다. 즉 컨테이너 내부에서만 로그파일을 저장시켜두면 사라지게 된다. 해결책으로 docker-compose.yml 파일에서 볼륨 매핑을 통해서 호스트 환경에서 특정 폴더를 확인할 수 있게 길을 뚫어주어야한다.

컨테이너 내부에 logs 라는 폴더를 만들어두었고, springboot 애플리케이션은 해당 폴더에 로그 파일을 생성하도록 xml에 반영하려고 한다.

컴포즈 파일에서 제일 아래 줄과 같이 호스트와 컨테이너간 볼륨매핑을 진행해 호스트에서 로그에 접근할 수 있게 구성했다.
- rolling policys는 TIME BASE로 3일주기로 지정
- WARN 이상의 레벨만 FILE LOG에 적재되도록 지정
- 현재는 루트에서 콘솔 APPENDER와 FILEAPPENDER가 INFO 이상의 로그를 관리할 수 있도록 길을 열어둠
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/app/logs/application.log</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/app/logs/application.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>3</maxHistory>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</configuration>
해당 변경사항을 다시 반영해 ACTIONS를 재기동시켜 결과물을 확인했다.

호스트환경에서 볼륨 매핑된 경로로 가서 로그파일이 생성되었는지 확인해보았고, log파일에 로그가 잘 적재되는 것을 확인했다. 추후 3일 주기로 파일이 삭제되는지까지 검증을 진행하겠다.

12월 29일 로그가 삭제된걸 확인했다.
https://agileryuhaeul.tistory.com/entry/Logback-%EC%9D%B4%EB%9E%80
Logback 이란?
Logback Logback이란? Logback은 Java에서 가장 많이 사용 되었던 로깅 라이브러리인 log4j의 후속버전이며, log4j를 설계한 Ceki Gulgu에 의해 설계되었습니다. logback은 새롭게 작성된 logger가 아니라, 오랫동
agileryuhaeul.tistory.com
'Backend' 카테고리의 다른 글
| [Java] 일급 컬렉션 학습 내용 정리 (0) | 2025.01.06 |
|---|---|
| DDD 레이어드 아키텍처에 대한 고민 (0) | 2024.12.31 |
| CICD 환경변수 문제 기록 (github actions, docker, ECR) (3) | 2024.12.29 |
| EC2 불필요한 버퍼/캐시 용량 줄이기 (0) | 2024.12.28 |
| [CI/CD] github self-hosted runner로 ec2 배포하기 (2) | 2024.12.26 |