package Log import org.tinylog.Logger import java.nio.file.Files import java.nio.file.Paths /** * Class to get log data from log files */ @Suppress("UNUSED") class LogGetter { // valid date format either dd-MM-yyyy or dd/MM/yyyy private val dateRegex = """(\d{2})[-/](\d{2})[-/](\d{4})""".toRegex() // each logline is in format dd/MM/yyyy HH:mm:ss Function: Message private val logLineRegex = """(\d{2}/\d{2}/\d{4}) (\d{2}:\d{2}:\d{2}) (.+?): (.+)""".toRegex() // log folder is current working directory + /logs private val logFolder: String = System.getProperty("user.dir") + "/logs" /** * Get log data for a specific date * @param date Date in format dd-MM-yyyy or dd/MM/yyyy * @return List of LogData for the specified date or empty list if date is invalid or no logs found */ fun getLog(date: String) : ArrayList { // check date with dateRegex and find dd MM yyyy val x = dateRegex.find(date) if (x==null) { Logger.error { "Invalid date format: $date" } return arrayListOf() } val (day, month, year) = x.destructured // logFilePath is logFolder/year/month/day.log val p = Paths.get(logFolder, year, month, "${day}.log") // check if file exists if (!Files.exists(p)) { Logger.error { "Log file does not exist: $p" } return arrayListOf() } val logDataList = ArrayList() Files.newBufferedReader(p).useLines { lines -> lines.forEachIndexed { index, string -> val ll = logLineRegex.find(string) if (ll != null && ll.groupValues.size == 5) { val logData = LogData( index , ll.groupValues[1], ll.groupValues[2], ll.groupValues[3], ll.groupValues[4] ) logDataList.add(logData) } } } return logDataList } }