From a38cf1995f8435834ad850c11754d9acf479b947 Mon Sep 17 00:00:00 2001 From: Ocame Date: Sun, 8 Dec 2024 22:32:26 +0100 Subject: [PATCH] Anpassung Logger --- build.gradle | 2 +- .../de/ocame/ffdiscordbot/ConfigLoader.java | 3 +- .../ocame/ffdiscordbot/FanFiktionReader.java | 31 +++++++++++---- .../de/ocame/ffdiscordbot/LoggerUtil.java | 39 +++++++++++++++++++ src/main/java/de/ocame/ffdiscordbot/Main.java | 3 ++ .../de/ocame/ffdiscordbot/SQLiteStorage.java | 8 ++-- .../ffdiscordbot/SocketServerRunnable.java | 18 +++++++-- src/main/resources/logback.xml | 12 ++++++ 8 files changed, 100 insertions(+), 16 deletions(-) create mode 100644 src/main/java/de/ocame/ffdiscordbot/LoggerUtil.java create mode 100644 src/main/resources/logback.xml diff --git a/build.gradle b/build.gradle index 8d5bf7b..7936863 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ plugins { application.mainClass = "de.ocame.ffdiscordbot.Main" group 'de.ocame' -version '1.2-SNAPSHOT' +version '1.3-SNAPSHOT' repositories { diff --git a/src/main/java/de/ocame/ffdiscordbot/ConfigLoader.java b/src/main/java/de/ocame/ffdiscordbot/ConfigLoader.java index f9161ec..2cb5a2c 100644 --- a/src/main/java/de/ocame/ffdiscordbot/ConfigLoader.java +++ b/src/main/java/de/ocame/ffdiscordbot/ConfigLoader.java @@ -12,9 +12,10 @@ public class ConfigLoader { try (FileInputStream input = new FileInputStream("ffBot.conf")) { properties.load(input); } catch (IOException e) { - System.err.println("Konfigurationsdatei konnte nicht geladen werden: " + e.getMessage()); + LoggerUtil.log("info", "ConfigLoader", "Konfigurationsdatei konnte nicht geladen werden: " + e.getMessage()); e.printStackTrace(); } + LoggerUtil.log("info", "ConfigLoader", "Konfigurationsdatei wurde geladen"); } public String getToken() { diff --git a/src/main/java/de/ocame/ffdiscordbot/FanFiktionReader.java b/src/main/java/de/ocame/ffdiscordbot/FanFiktionReader.java index 7bcc784..5383b30 100644 --- a/src/main/java/de/ocame/ffdiscordbot/FanFiktionReader.java +++ b/src/main/java/de/ocame/ffdiscordbot/FanFiktionReader.java @@ -47,10 +47,12 @@ public class FanFiktionReader { public void checkAlerts() { try { - + LoggerUtil.log("info", "Reader", "Beginn Check Alerts"); Document alertPage = fetchHTMLWithAuthentication(URL + "/?a=i"); - if (alertPage == null) + if (alertPage == null) { + LoggerUtil.log("info", "Reader", "Keine Seite gefunden"); return; + } // Story Check Element authorBox = alertPage.getElementById("ffcbox-alerts_author-box"); @@ -59,6 +61,8 @@ public class FanFiktionReader { for (Element row : rows) { checkNewStoryFromAlert(row); } + if(rows.isEmpty()) + LoggerUtil.log("info", "Reader", "Keine neuen Storys"); } // Kapitel Check @@ -89,6 +93,9 @@ public class FanFiktionReader { } } + + if(rows.isEmpty()) + LoggerUtil.log("info", "Reader", "Keine neuen Kapitel"); } } catch (IOException | InterruptedException e) { @@ -96,6 +103,7 @@ public class FanFiktionReader { } Random random = new Random(); this.time = random.nextLong(24 * 60, 34 * 60); + LoggerUtil.log("info", "Reader", "Ende Check Alerts"); } /** @@ -104,6 +112,7 @@ public class FanFiktionReader { * @param row */ public void checkNewStoryFromAlert(Element row) { + LoggerUtil.log("info", "Reader", "Check neue Storys"); Elements cols = row.select("td"); if (cols.size() >= 2) { // Ensure there are at least two columns /*name, link, ffid, date, autor*/ @@ -142,8 +151,12 @@ public class FanFiktionReader { * @param chapterDate */ public void checkNewChapter(String url, long chapterDate) { - try { + checkNewChapter(url, chapterDate, false); + } + public void checkNewChapter(String url, long chapterDate, boolean force) { + try { + LoggerUtil.log("info", "Reader", "Check neue Kapitel"); Document storyPage = fetchHTMLWithAuthentication(url); if (storyPage == null) return; @@ -172,14 +185,15 @@ public class FanFiktionReader { // todo: fehler behandlung } - if (!SQLiteStorage.checkChapter(ffid, Long.parseLong(chapterNumer))) { + if (!SQLiteStorage.checkChapter(ffid, Long.parseLong(chapterNumer)) || force) { /* todo: neue Chapter gefunden Ausgabe */ if (SQLiteStorage.isStoryInvalid(ffid)) { readandSaveStory(storyPage); } DataStory ds = SQLiteStorage.getStory(ffid); DataChapter newChapter = new DataChapter(chapterName, URL + onChange, ffid, chapterDate, Long.parseLong(chapterNumer)); - SQLiteStorage.insertChapter(newChapter); + if(!SQLiteStorage.checkChapter(ffid, Long.parseLong(chapterNumer))) + SQLiteStorage.insertChapter(newChapter); //clearChapter(); new ChapterNotifier(jda, newChapter, ds).sendOutput(); } @@ -275,7 +289,7 @@ public class FanFiktionReader { * Führt den Login aus */ public void login() { - System.out.print("Login muss ausgeführt werden"); + LoggerUtil.log("info", "Reader", "Login muss ausgeführt werden"); try { ConfigLoader configLoader = new ConfigLoader(); @@ -288,6 +302,7 @@ public class FanFiktionReader { if (nameBox.isEmpty()) { time += 2 * 60 * 60; // Zeit um 2h erhöhen new InfoNotifier(jda).setMessagetext("Login Fehlgeschlagen").sendOutput(); + LoggerUtil.log("info", "Reader", "Login Fehlgeschlagen"); } Elements aBox = logintPage.select("input[name='a']"); @@ -311,9 +326,11 @@ public class FanFiktionReader { if (!nameBox.isEmpty()) { time += 2 * 60 * 60; // Zeit um 2h erhöhen new InfoNotifier(jda).setMessagetext("Login Fehlgeschlagen").sendOutput(); + LoggerUtil.log("info", "Reader", "Login Fehlgeschlagen"); } } catch (IOException | InterruptedException e) { + LoggerUtil.log("error", "Reader", "Login nicht erfolgreich " + e.getMessage()); e.printStackTrace(); } @@ -353,7 +370,7 @@ public class FanFiktionReader { try { Document sendToFav = fetcher.fetchHtml(URL + "/?a=q&a1=v&t=addstory&lbi=popup-addtofav-body&ar=1&action=i", postData); if(sendToFav.getElementsByClass("successbox").isEmpty()) { - System.out.print("Story konnte nicht hinzugefügt werden"); + LoggerUtil.log("info", "Reader", "Story konnte nicht hinzugefügt werden"); new InfoNotifier(jda).setMessagetext("Story " + ffid + "konnte nicht hinzugefügt werden. \n" + sendToFav.toString()).sendOutput(); } } diff --git a/src/main/java/de/ocame/ffdiscordbot/LoggerUtil.java b/src/main/java/de/ocame/ffdiscordbot/LoggerUtil.java new file mode 100644 index 0000000..de27c0a --- /dev/null +++ b/src/main/java/de/ocame/ffdiscordbot/LoggerUtil.java @@ -0,0 +1,39 @@ +package de.ocame.ffdiscordbot; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class LoggerUtil { + //private static final Logger logger = LoggerFactory.getLogger(LoggerUtil.class); + + /** + * Erstellt einen Logeintrag basierend auf Typ, Modul und Nachricht. + * + * @param logType Der Typ des Logs: "trace", "debug", "info", "warn", "error". + * @param module Der Name des Moduls oder Kontextes. + * @param message Die Nachricht, die geloggt werden soll. + */ + public static void log(String logType, String module, String message) { + Logger logger = LoggerFactory.getLogger(module); + switch (logType.toLowerCase()) { + case "trace": + logger.trace(message); + break; + case "debug": + logger.debug(message); + break; + case "info": + logger.info(message); + break; + case "warn": + logger.warn(message); + break; + case "error": + logger.error(message); + break; + default: + logger.warn("Unbekannter Log-Typ: {}. Nachricht: {}", logType, message); + + } + } +} diff --git a/src/main/java/de/ocame/ffdiscordbot/Main.java b/src/main/java/de/ocame/ffdiscordbot/Main.java index 72d27dc..5c66d32 100644 --- a/src/main/java/de/ocame/ffdiscordbot/Main.java +++ b/src/main/java/de/ocame/ffdiscordbot/Main.java @@ -53,6 +53,9 @@ public class Main { // Berechne das neue Intervall basierend auf ffr.getTime() delay[0] = ffr.getTime(); + + LoggerUtil.log("info", "Main", "neue Zeit: " + Long.toString(delay[0])); + // Plane die Aufgabe erneut mit dem neuen Intervall scheduledFuture.get().cancel(false); scheduledFuture.set(scheduler.schedule(this, delay[0], TimeUnit.SECONDS)); diff --git a/src/main/java/de/ocame/ffdiscordbot/SQLiteStorage.java b/src/main/java/de/ocame/ffdiscordbot/SQLiteStorage.java index d428055..765c808 100644 --- a/src/main/java/de/ocame/ffdiscordbot/SQLiteStorage.java +++ b/src/main/java/de/ocame/ffdiscordbot/SQLiteStorage.java @@ -3,6 +3,8 @@ import java.awt.*; import java.sql.*; import org.json.JSONArray; +import org.json.JSONObject; + import java.util.ArrayList; import java.util.List; @@ -293,13 +295,13 @@ public class SQLiteStorage { String channelOption = rs.getString("value"); if (!channelOption.isEmpty()) { - JSONArray jsonArray = new JSONArray(channelOption); + JSONObject jsonObject = new JSONObject(channelOption); List longList = new ArrayList<>(); - for (int i = 0; i < jsonArray.length(); i++) { + for (String key : jsonObject.keySet()) { try { // Versuche, den Wert in ein Long zu konvertieren - long value = jsonArray.getLong(i); + long value = jsonObject.getLong(key); longList.add(value); // Füge den Wert der Liste hinzu, wenn es ein gültiger Long ist } catch (Exception e) { // Wenn der Wert kein gültiges Long ist, wird er übersprungen diff --git a/src/main/java/de/ocame/ffdiscordbot/SocketServerRunnable.java b/src/main/java/de/ocame/ffdiscordbot/SocketServerRunnable.java index a915461..9d3e733 100644 --- a/src/main/java/de/ocame/ffdiscordbot/SocketServerRunnable.java +++ b/src/main/java/de/ocame/ffdiscordbot/SocketServerRunnable.java @@ -25,7 +25,7 @@ class SocketServerRunnable implements Runnable { public void run() { int port = 12345; try (ServerSocket serverSocket = new ServerSocket(port)) { - System.out.println("Socket-Server läuft auf Port " + port); + LoggerUtil.log("info", "SocketRunnable", "Socket-Server läuft auf Port " + port); while (true) { try (Socket clientSocket = serverSocket.accept(); @@ -33,7 +33,8 @@ class SocketServerRunnable implements Runnable { PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true)) { String jsonMessageFromClient = in.readLine(); - System.out.println("Nachricht vom Client erhalten: " + jsonMessageFromClient); + LoggerUtil.log("info", "SocketRunnable", "Nachricht vom Client erhalten: " + jsonMessageFromClient); + JSONObject jsonData = new JSONObject(jsonMessageFromClient); String action = jsonData.getString("action"); @@ -45,17 +46,19 @@ class SocketServerRunnable implements Runnable { case "check" -> checkAction(out); case "chapterTest" -> chapterTest(jsonData, out); case "addFavo" -> addFavo(jsonData); + case "forceChapter" -> forceChapter(jsonData); } } catch (IOException | NullPointerException e) { - System.out.println("Fehler bei der Kommunikation mit dem Client: " + e.getMessage()); + LoggerUtil.log("error", "SocketRunnable", "Fehler bei der Kommunikation mit dem Client: " + e.getMessage()); + e.printStackTrace(); } } } catch (IOException e) { - System.out.println("Server konnte nicht gestartet werden: " + e.getMessage()); + LoggerUtil.log("error", "SocketRunnable", "Server konnte nicht gestartet werden: " + e.getMessage()); } } private Boolean channelCheckAction(JSONObject jsonData, PrintWriter out) { @@ -118,4 +121,11 @@ class SocketServerRunnable implements Runnable { String ffId = jsonData.getString("ffId"); ffr.addStoryToFavorit(ffId); } + private void forceChapter(JSONObject jsonData) { + String link = jsonData.getString("link"); + String timestamp = jsonData.getString("timestamp"); + + ffr.checkNewChapter(link, ffr.DateToTimestamp(timestamp), true); + + } } \ No newline at end of file diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml new file mode 100644 index 0000000..8cc54a9 --- /dev/null +++ b/src/main/resources/logback.xml @@ -0,0 +1,12 @@ + + + + + %d{HH:mm:ss.SSS} %boldCyan(%-34.-34thread) %red(%10.10X{jda.shard}) %boldGreen(%-15.-15logger{0}) %highlight(%-6level) %msg%n + + + + + + + \ No newline at end of file