[英]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.