Skip to content

[REFACTOR/90] 다시 로컬 로그와 S3 로그 병합 후 S3 업로드 기능 추가 & Logback 재설정 로직 재설정#140

Merged
persi0815 merged 4 commits intodevelopfrom
bugfix/90
Jan 2, 2025
Merged

[REFACTOR/90] 다시 로컬 로그와 S3 로그 병합 후 S3 업로드 기능 추가 & Logback 재설정 로직 재설정#140
persi0815 merged 4 commits intodevelopfrom
bugfix/90

Conversation

@persi0815
Copy link
Contributor

@persi0815 persi0815 commented Jan 2, 2025

PR 타입

  • 기타

구현한 기능

  • S3에 기존 로그 파일이 있을 경우, 로컬 로그와 병합 후 업로드하도록 기능 추가 (중복 로그 방지 위해)

  • 병합된 로그 파일은 임시 파일로 생성하여 데이터 손실 방지

  • 업로드 후 로컬 로그 파일을 삭제하여 디스크 공간 확보

  • Logback 재설정 로직 추가 (의의와 기능 아래에 기재)

  • 병합 및 업로드 과정에서 상세한 로그 기록 추가

  • 코드 구조 개선 및 파일 처리 안정성 향상

테스트 결과

첫 파일은 잘 생성됨
image

삭제되었을때, 다시 로그가 찍히면 로컬 파일 다시 생겨야 하는데, 안생김.
image

이때 정상 작동 안했던 이유는 배포된 환경에서 Logback 파일에 접근하는 경로가 틀렸기 때문.
자세한 내용은 아래 pr 참고
#142

코드 설명

image

Logback 재설정 로직 추가한 이유

logback-spring.xml에 설정된 RollingFileAppender는 로그 파일이 없으면 자동으로 과 설정에 따라 새 파일이 생성되었어야 했는데, 안되어서 ..

파일 삭제 후 새로운 로그 파일을 생성해야 했습니다.
로컬 로그 파일을 삭제하면 Logback이 새로운 파일을 생성해야 하지만, 기존 컨텍스트가 파일 핸들러를 유지하고 있는 경우 파일이 생성되지 않는 문제가 발생할 수 있습니다.
즉, 로그 파일이 삭제되었거나 이동되었지만, 기존 애플리케이션이 해당 파일을 계속 참조하고 있다면 새로운 로그 파일이 만들어지지 않는 문제가 발생할 수 있는 것입니다.

*컨텍스트: 로깅 시스템의 설정을 유지하고 관리하는 객체입니다. Spring Boot에서는 Logger Context가 로그 설정을 관리하며, 애플리케이션 실행 시 logback-spring.xml을 로드하여 초기화합니다. 컨텍스트가 종료될 때 파일 핸들러를 닫아야 하지만, 특정한 상황에서는 파일 핸들러를 닫지 않고 유지하는 경우가 있습니다.
*파일 핸들러: 로그 시스템이 로그 파일을 열어서 데이터를 기록하는 객체입니다. RollingFileAppender는 파일 핸들러를 통해 로그 파일을 관리하며, 파일을 열고 닫으며 로그를 저장합니다.

${LOG_HOME}/error-%d{yyyy-MM-dd}.log 현재 위 설정으로 인해 자정에 롤링이 발생하고, RollingFileAppender가 기존 파일 핸들러를 닫고 새로운 파일로 교체합니다. 그런데, 다른 트리거들에는 롤링이 적용이 되지 않아 핸들러가 기존 파일을 계속 유지할 수 있습니다. 특히, 파일을 수동으로 삭제(Files.deleteIfExists(localFile.toPath()))하거나, 로그 파일을 강제로 이동할 경우, 핸들러가 해제되지 않을 수 있습니다.

그래서, 수동으로 Logback 컨텍스트를 재설정하여 파일 핸들러를 초기화하는 코드를 작성했습니다.

Logback 컨텍스트를 재설정 기능

Logback 컨텍스트를 재설정함으로써 LoggerContext를 가져와 기존 로그 컨텍스트를 멈추고(stop()), 초기화(reset())한 뒤, 새로운 설정 파일(logback-spring.xml)을 다시 적용(doConfigure())하여 로깅을 새롭게 시작(start())합니다.

이를 통해 컨텍스트를 초기화하고 다시 시작함으로써, 이전에 삭제된 로그 파일이 새로 생성되도록 합니다. (Logback의 RollingFileAppender가 로그 파일이 없으면 자동으로 새 파일을 생성)

@persi0815 persi0815 changed the title [REFACTOR/90] 다시 로컬 로그와 S3 로그 병합 후 S3 업로드 기능 추가 [REFACTOR/90] 다시 로컬 로그와 S3 로그 병합 후 S3 업로드 기능 추가 & Logback 재설정 로직 재설정 Jan 2, 2025
@persi0815 persi0815 merged commit af5561d into develop Jan 2, 2025
@persi0815 persi0815 self-assigned this Jan 2, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant