From cf3b07fa26e393d659b1c28498c430c587b5c471 Mon Sep 17 00:00:00 2001 From: Ady Liu Date: Tue, 14 Apr 2020 21:21:39 +0800 Subject: [PATCH] read less than 1MiB & 10000 lines of log file --- .../com/xxl/job/core/log/XxlJobFileAppender.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/log/XxlJobFileAppender.java b/xxl-job-core/src/main/java/com/xxl/job/core/log/XxlJobFileAppender.java index 3fa8c4de..a041ca4d 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/log/XxlJobFileAppender.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/log/XxlJobFileAppender.java @@ -5,6 +5,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.*; +import java.nio.charset.StandardCharsets; import java.text.SimpleDateFormat; import java.util.Date; @@ -156,16 +157,25 @@ public class XxlJobFileAppender { StringBuffer logContentBuffer = new StringBuffer(); int toLineNum = 0; LineNumberReader reader = null; + boolean isEnd = false; try { //reader = new LineNumberReader(new FileReader(logFile)); reader = new LineNumberReader(new InputStreamReader(new FileInputStream(logFile), "utf-8")); String line = null; - + long totalSize = 0; while ((line = reader.readLine())!=null) { toLineNum = reader.getLineNumber(); // [from, to], start as 1 if (toLineNum >= fromLineNum) { logContentBuffer.append(line).append("\n"); } + + totalSize += line.getBytes(StandardCharsets.UTF_8).length; + //read less than 1MiB & 10000 lines to hold on the netty or jvm memory + if(toLineNum > 10000 || totalSize > 1024*1024) { + logContentBuffer.append("******************** FILE IS TOO LARGE ********************"); + isEnd = true; + break; + } } } catch (IOException e) { logger.error(e.getMessage(), e); @@ -180,7 +190,7 @@ public class XxlJobFileAppender { } // result - LogResult logResult = new LogResult(fromLineNum, toLineNum, logContentBuffer.toString(), false); + LogResult logResult = new LogResult(fromLineNum, toLineNum, logContentBuffer.toString(), isEnd); return logResult; /*