From 028268c698b3743c33983bbc78c1b2011f8f8967 Mon Sep 17 00:00:00 2001 From: Ryan Wang Date: Mon, 10 Feb 2020 21:47:54 +0800 Subject: [PATCH] fix: Incorrect sequence of tailing log file#517 (#556) --- .../app/service/impl/AdminServiceImpl.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/main/java/run/halo/app/service/impl/AdminServiceImpl.java b/src/main/java/run/halo/app/service/impl/AdminServiceImpl.java index 1331ada95..b527e4f20 100644 --- a/src/main/java/run/halo/app/service/impl/AdminServiceImpl.java +++ b/src/main/java/run/halo/app/service/impl/AdminServiceImpl.java @@ -45,6 +45,8 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -473,6 +475,8 @@ public class AdminServiceImpl implements AdminService { File file = new File(haloProperties.getWorkDir(), LOG_PATH); + List linesArray = new ArrayList<>(); + StringBuilder result = new StringBuilder(); if (!file.exists()) { @@ -493,8 +497,7 @@ public class AdminServiceImpl implements AdminService { randomAccessFile.seek(pos); if (randomAccessFile.readByte() == '\n') { String line = randomAccessFile.readLine(); - result.append(new String(line.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8)); - result.append(StringUtils.LF); + linesArray.add(new String(line.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8)); count++; if (count == lines) { break; @@ -503,8 +506,7 @@ public class AdminServiceImpl implements AdminService { } if (pos == 0) { randomAccessFile.seek(0); - result.append(new String(randomAccessFile.readLine().getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8)); - result.append(StringUtils.LF); + linesArray.add(new String(randomAccessFile.readLine().getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8)); } } } catch (Exception e) { @@ -518,6 +520,14 @@ public class AdminServiceImpl implements AdminService { } } } + + Collections.reverse(linesArray); + + linesArray.forEach(line -> { + result.append(line) + .append(StringUtils.LF); + }); + return result.toString(); } }