Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PR 타입
구현한 기능
S3에 기존 로그 파일이 있을 경우, 로컬 로그와 병합 후 업로드하도록 기능 추가 (중복 로그 방지 위해)
병합된 로그 파일은 임시 파일로 생성하여 데이터 손실 방지
업로드 후 로컬 로그 파일을 삭제하여 디스크 공간 확보
Logback 재설정 로직 추가 (의의와 기능 아래에 기재)
병합 및 업로드 과정에서 상세한 로그 기록 추가
코드 구조 개선 및 파일 처리 안정성 향상
테스트 결과
첫 파일은 잘 생성됨

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

이때 정상 작동 안했던 이유는 배포된 환경에서 Logback 파일에 접근하는 경로가 틀렸기 때문.
자세한 내용은 아래 pr 참고
#142
코드 설명
Logback 재설정 로직 추가한 이유
logback-spring.xml에 설정된 RollingFileAppender는 로그 파일이 없으면 자동으로 과 설정에 따라 새 파일이 생성되었어야 했는데, 안되어서 ..
파일 삭제 후 새로운 로그 파일을 생성해야 했습니다.
로컬 로그 파일을 삭제하면 Logback이 새로운 파일을 생성해야 하지만, 기존 컨텍스트가 파일 핸들러를 유지하고 있는 경우 파일이 생성되지 않는 문제가 발생할 수 있습니다.
즉, 로그 파일이 삭제되었거나 이동되었지만, 기존 애플리케이션이 해당 파일을 계속 참조하고 있다면 새로운 로그 파일이 만들어지지 않는 문제가 발생할 수 있는 것입니다.
*컨텍스트: 로깅 시스템의 설정을 유지하고 관리하는 객체입니다. Spring Boot에서는 Logger Context가 로그 설정을 관리하며, 애플리케이션 실행 시 logback-spring.xml을 로드하여 초기화합니다. 컨텍스트가 종료될 때 파일 핸들러를 닫아야 하지만, 특정한 상황에서는 파일 핸들러를 닫지 않고 유지하는 경우가 있습니다.
${LOG_HOME}/error-%d{yyyy-MM-dd}.log 현재 위 설정으로 인해 자정에 롤링이 발생하고, RollingFileAppender가 기존 파일 핸들러를 닫고 새로운 파일로 교체합니다. 그런데, 다른 트리거들에는 롤링이 적용이 되지 않아 핸들러가 기존 파일을 계속 유지할 수 있습니다. 특히, 파일을 수동으로 삭제(Files.deleteIfExists(localFile.toPath()))하거나, 로그 파일을 강제로 이동할 경우, 핸들러가 해제되지 않을 수 있습니다.*파일 핸들러: 로그 시스템이 로그 파일을 열어서 데이터를 기록하는 객체입니다. RollingFileAppender는 파일 핸들러를 통해 로그 파일을 관리하며, 파일을 열고 닫으며 로그를 저장합니다.
그래서, 수동으로 Logback 컨텍스트를 재설정하여 파일 핸들러를 초기화하는 코드를 작성했습니다.
Logback 컨텍스트를 재설정 기능
Logback 컨텍스트를 재설정함으로써 LoggerContext를 가져와 기존 로그 컨텍스트를 멈추고(stop()), 초기화(reset())한 뒤, 새로운 설정 파일(logback-spring.xml)을 다시 적용(doConfigure())하여 로깅을 새롭게 시작(start())합니다.
이를 통해 컨텍스트를 초기화하고 다시 시작함으로써, 이전에 삭제된 로그 파일이 새로 생성되도록 합니다. (Logback의 RollingFileAppender가 로그 파일이 없으면 자동으로 새 파일을 생성)