从 Spring 启动应用程序将日志文件存储在 AWS S3 中

San*_*Raj 5 java spring log4j amazon-s3 amazon-web-services

我正在构建一个 Spring-boot 应用程序,其中所有日志记录都存储在 log4j.properties 中的指定路径中。

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

一旦我在 AWS 上托管应用程序,日志文件的指定路径将变得无效。

我如何解决这个问题,其中日志文件也应该存储在云中的不同路径中,比如 Amazon S3,但不在服务器上,因为日志文件需要相当大的大小。

log4j.appender.file.File=/my_log.log
Run Code Online (Sandbox Code Playgroud)

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

San*_*Raj 5

    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);
    }
}
Run Code Online (Sandbox Code Playgroud)