From c05a8521f6a2ea52cf4bb041d497b2d6cbb85e92 Mon Sep 17 00:00:00 2001 From: persi Date: Thu, 2 Jan 2025 20:10:52 +0900 Subject: [PATCH] =?UTF-8?q?bug=20fix:=20=EB=A1=9C=EA=B7=B8=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=EC=9D=B4=20=EC=97=86=EC=9D=84=20=EA=B2=BD=EC=9A=B0=20?= =?UTF-8?q?=EC=88=98=EB=8F=99=EC=9C=BC=EB=A1=9C=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?(ensureLogFileExists)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/global/s3/S3LogService.java | 35 +++++++++++++++---- 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/src/main/java/LuckyVicky/backend/global/s3/S3LogService.java b/src/main/java/LuckyVicky/backend/global/s3/S3LogService.java index 3cdebd9..01eaab5 100644 --- a/src/main/java/LuckyVicky/backend/global/s3/S3LogService.java +++ b/src/main/java/LuckyVicky/backend/global/s3/S3LogService.java @@ -38,11 +38,9 @@ public class S3LogService { private String bucket; public void uploadDailyLog(String day) { + log.info("Starting uploadDailyLog for day: {}", day); File localFile = getLocalLogFile(day); - if (!localFile.exists()) { - log.warn("No local log file found for day={}", day); - return; - } + ensureLogFileExists(localFile); // 로그 파일이 없으면 생성 String s3Key = buildS3Key(day); File tempFile = new File("temp-" + localFile.getName()); @@ -50,9 +48,10 @@ public void uploadDailyLog(String day) { try { // S3에 기존 로그 파일이 있는 경우 다운로드하여 병합 if (amazonS3.doesObjectExist(bucket, s3Key)) { - log.info("Existing log found in S3. Merging logs..."); + log.info("Existing log found in S3. Merging logs for key: {}", s3Key); mergeLogsFromS3(localFile, tempFile, s3Key); } else { + log.info("No existing log found in S3 for key: {}. Copying local file.", s3Key); Files.copy(localFile.toPath(), tempFile.toPath()); } @@ -68,11 +67,16 @@ public void uploadDailyLog(String day) { } catch (Exception e) { log.error("Failed to upload or merge log file to S3. day={}, file={}, key={}", day, localFile, s3Key, e); } finally { - tempFile.delete(); // 임시 파일 삭제 + if (tempFile.delete()) { + log.info("Temporary file deleted: {}", tempFile.getName()); + } else { + log.warn("Failed to delete temporary file: {}", tempFile.getName()); + } } } private void resetLogbackContext() { + log.info("Resetting Logback context to create a new log file."); LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); loggerContext.stop(); // 기존 컨텍스트 정지 @@ -86,18 +90,24 @@ private void resetLogbackContext() { } catch (JoranException e) { log.error("Failed to reset Logback context", e); } + + ensureLogFileExists(getLocalLogFile("today")); + log.info("Dummy log written to trigger new file creation."); } private void mergeLogsFromS3(File localFile, File tempFile, String s3Key) throws IOException { + log.info("Merging S3 log and local log for key: {}", s3Key); try (S3Object s3Object = amazonS3.getObject(new GetObjectRequest(bucket, s3Key)); InputStream s3InputStream = s3Object.getObjectContent(); OutputStream tempOutputStream = new FileOutputStream(tempFile, true); InputStream localInputStream = new FileInputStream(localFile)) { // S3 로그 내용을 임시 파일에 복사 + log.info("Copying S3 log content to temp file."); copyContent(s3InputStream, tempOutputStream); // 로컬 로그 내용을 임시 파일에 이어서 복사 + log.info("Appending local log content to temp file."); copyContent(localInputStream, tempOutputStream); } } @@ -110,6 +120,19 @@ private void copyContent(InputStream input, OutputStream output) throws IOExcept } } + private void ensureLogFileExists(File logFile) { + if (!logFile.exists()) { + try { + Files.createFile(logFile.toPath()); + log.info("Log file manually created: {}", logFile.getAbsolutePath()); + } catch (IOException e) { + log.error("Failed to create log file manually: {}", logFile.getAbsolutePath(), e); + } + } else { + log.info("Log file already exists: {}", logFile.getAbsolutePath()); + } + } + private File getLocalLogFile(String day) { String logHome = System.getProperty("LOG_HOME", "./logs"); LocalDate targetDate = "yesterday".equals(day) ? LocalDate.now().minusDays(1) : LocalDate.now();