diff --git a/src/main/java/com/erudika/scoold/api/ApiController.java b/src/main/java/com/erudika/scoold/api/ApiController.java index 8a7cf90e..bb43a041 100644 --- a/src/main/java/com/erudika/scoold/api/ApiController.java +++ b/src/main/java/com/erudika/scoold/api/ApiController.java @@ -61,6 +61,9 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -76,6 +79,7 @@ import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; +import java.util.stream.Stream; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; @@ -996,6 +1000,19 @@ public Map stats(HttpServletRequest req) { stats.put("para_version", Optional.ofNullable(paraVer).orElse("unknown")); stats.put("scoold_version", Optional.ofNullable(Version.getVersion()). orElse(Optional.ofNullable(System.getenv("SCOOLD_VERSION")).orElse("unknown"))); + + if ("true".equals(req.getParameter("includeLogs"))) { + try { + String logFile = System.getProperty("para.logs_dir", System.getProperty("user.dir")) + + "/" + System.getProperty("para.logs_name", "scoold") + ".log"; + Path path = Paths.get(logFile); + try (Stream lines = Files.lines(path)) { + stats.put("log", lines.collect(Collectors.joining("\n"))); + } + } catch (Exception e) { + logger.error("Failed to read log file. {}", e.getMessage()); + } + } return stats; } diff --git a/src/main/java/com/erudika/scoold/utils/ScooldUtils.java b/src/main/java/com/erudika/scoold/utils/ScooldUtils.java index f68583a6..3e1ddefd 100755 --- a/src/main/java/com/erudika/scoold/utils/ScooldUtils.java +++ b/src/main/java/com/erudika/scoold/utils/ScooldUtils.java @@ -2101,7 +2101,7 @@ public Map getApiKeysExpirations() { } } } catch (Exception ex) { - logger.error("Failed to parse API key " + k + " - key doesn't seem to be in JWT format.", ex.getMessage()); + logger.error("Failed to parse API key " + k + " - key doesn't seem to be in JWT format. {}", ex.getMessage()); } return 0L; })); diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index b19160a2..4f86485f 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -13,10 +13,10 @@ - ${para.logs_dir:-.}/${para.logs_name:-para}.log + ${para.logs_dir:-.}/${para.logs_name:-scoold}.log - para-%d{yyyy-MM}.log.zip + ${para.logs_name:-scoold}-%d{yyyy-MM}.log.zip 12 3GB @@ -29,9 +29,9 @@ - ${para.logs_dir:-.}/${para.logs_name:-para}-metrics.log + ${para.logs_dir:-.}/${para.logs_name:-scoold}-metrics.log - ${para.logs_name:-para}-metrics-%d{yyyy-MM-dd}.log.zip + ${para.logs_name:-scoold}-metrics-%d{yyyy-MM-dd}.log.zip 7 1GB diff --git a/src/main/resources/templates/api.yaml b/src/main/resources/templates/api.yaml index 10c5769d..f83d1d67 100644 --- a/src/main/resources/templates/api.yaml +++ b/src/main/resources/templates/api.yaml @@ -1443,6 +1443,13 @@ paths: - stats security: - scoold_auth: [] + parameters: + - name: includeLogs + in: query + required: false + description: If set to `true` will read and return the Scoold log file as well. + schema: + type: boolean responses: '200': description: stats