簡體   English   中英

從 Spring 啟動應用程序將日志文件存儲在 AWS S3 中

[英]Storing log file in AWS S3 from Spring boot application

我正在構建一個 Spring-boot 應用程序,其中所有日志記錄都存儲在 log4j.properties 中的指定路徑中。

我在 AWS Beanstalk 上托管此應用程序。

一旦我在 AWS 上托管應用程序,日志文件的指定路徑將變得無效。

我如何解決這個問題,其中日志文件也應該存儲在雲中的不同路徑中,比如 Amazon S3,但不在服務器上,因為日志文件需要相當大的大小。

log4j.appender.file.File=/my_log.log

如何更改上述行以在 AWS S3 中存儲“my_log.log”?

日志文件也應該存儲在雲中的不同路徑中,比如 Amazon S3。

我確定您不能將您的信息直接記錄到 S3。 這是一個成本更高的過程。 首先您必須登錄 EC2 實例,然后您必須同步以同步您可以使用 LogRotate 的日志。

要將您的日志存儲在 S3 中,請將logrotate apache 日志引用到 amazon S3

我能夠通過將日志文件存儲在安裝了 Web 服務器的 Amazon EC2 位置來解決此問題。 我存儲在 Amazon EC2 實例中,因為我的 Web 服務器托管在那里。 您可以選擇我們自己的位置。 然后在我的 Spring boot 應用程序本身中編寫了一個 cron 作業,每 24 小時將這些文件從 Amazon EC2 復制到 Amazon S3。

    import com.amazonaws.services.s3.AmazonS3;
    import com.amazonaws.services.s3.model.PutObjectRequest;
    import org.springframework.core.env.Environment;
    import org.springframework.scheduling.annotation.EnableScheduling;
    import org.springframework.scheduling.annotation.Scheduled;


@Autowired
    private AmazonS3 s3Client;
@Scheduled(cron = "0 5 1 * * *")
public void moveLogsFromEC2ToS3() {
    try {
        File logsDir = new File(env.getProperty("AWS_EC2_LOG_PATH"));
        for (File logFile : logsDir.listFiles()) {
            String fileName = logFile.getName();
            if (fileName.endsWith(".log")) {
                s3Client.putObject(new PutObjectRequest(env.getProperty("AWS_S3_LOGS_BUCKET_NAME"), fileName, logFile));
            }
        }
    } catch (Exception e) {
        logger.error("Error in moving log files! : {}", e);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM