From b6c0e730d3e360edc8ea2ffe6388d187ee6617ef Mon Sep 17 00:00:00 2001 From: jzitnik-dev Date: Sun, 23 Mar 2025 13:54:51 +0100 Subject: [PATCH] chore(logging): Implemented basic logging --- pom.xml | 6 +-- src/main/java/cz/jzitnik/Main.java | 7 +++- src/main/java/cz/jzitnik/game/GameSaver.java | 6 +++ .../java/cz/jzitnik/game/SpriteLoader.java | 3 ++ .../game/logic/CustomLogicProvider.java | 6 +++ .../game/mobs/EntityLogicProvider.java | 11 ++++- .../jzitnik/game/threads/ThreadProvider.java | 3 ++ .../java/cz/jzitnik/tui/ResourceLoader.java | 4 ++ .../java/cz/jzitnik/tui/ScreenRenderer.java | 5 +++ src/main/resources/logback.xml | 40 +++++++++++++++++++ 10 files changed, 86 insertions(+), 5 deletions(-) create mode 100644 src/main/resources/logback.xml diff --git a/pom.xml b/pom.xml index 0882215..f143849 100644 --- a/pom.xml +++ b/pom.xml @@ -124,9 +124,9 @@ 2.0.17 - org.slf4j - slf4j-simple - 2.0.17 + ch.qos.logback + logback-classic + 1.5.18 diff --git a/src/main/java/cz/jzitnik/Main.java b/src/main/java/cz/jzitnik/Main.java index fcaedd1..ddf2808 100644 --- a/src/main/java/cz/jzitnik/Main.java +++ b/src/main/java/cz/jzitnik/Main.java @@ -7,19 +7,23 @@ import cz.jzitnik.game.threads.ThreadProvider; import cz.jzitnik.game.ui.*; import cz.jzitnik.game.SpriteLoader; import cz.jzitnik.tui.ScreenRenderer; +import lombok.extern.slf4j.Slf4j; + import org.jline.terminal.Terminal; import org.jline.terminal.TerminalBuilder; import java.io.IOException; +@Slf4j public class Main { public static void main(String[] args) { try { + log.info("Setting up terminal"); Terminal terminal = TerminalBuilder.terminal(); terminal.enterRawMode(); if (!terminal.hasMouseSupport()) { - System.out.println("Error: This terminal does not support mouse."); + log.error("This terminal does not support mouse"); System.exit(1); } @@ -56,6 +60,7 @@ public class Main { Thread.sleep(1000); } + log.info("Closing terminal"); terminal.trackMouse(Terminal.MouseTracking.Off); terminal.close(); } catch (IOException | InterruptedException ignored) { diff --git a/src/main/java/cz/jzitnik/game/GameSaver.java b/src/main/java/cz/jzitnik/game/GameSaver.java index a0ddd2b..0001900 100644 --- a/src/main/java/cz/jzitnik/game/GameSaver.java +++ b/src/main/java/cz/jzitnik/game/GameSaver.java @@ -2,6 +2,9 @@ package cz.jzitnik.game; import java.io.*; +import lombok.extern.slf4j.Slf4j; + +@Slf4j public class GameSaver { public void save(Game game) { try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("world.ser"))) { @@ -11,7 +14,9 @@ public class GameSaver { } } + // TODO: This will need rewrite public static Game load() { + log.info("Loading game"); File file = new File("world.ser"); if (!file.isFile()) { @@ -19,6 +24,7 @@ public class GameSaver { } try { + log.info("Loading game from save file"); FileInputStream fileIn = new FileInputStream("world.ser"); ObjectInputStream in = new ObjectInputStream(fileIn); diff --git a/src/main/java/cz/jzitnik/game/SpriteLoader.java b/src/main/java/cz/jzitnik/game/SpriteLoader.java index e691847..6ed448d 100644 --- a/src/main/java/cz/jzitnik/game/SpriteLoader.java +++ b/src/main/java/cz/jzitnik/game/SpriteLoader.java @@ -3,9 +3,11 @@ package cz.jzitnik.game; import cz.jzitnik.game.sprites.*; import cz.jzitnik.tui.Sprite; import cz.jzitnik.tui.SpriteList; +import lombok.extern.slf4j.Slf4j; import java.util.HashMap; +@Slf4j public class SpriteLoader { public enum SPRITES { // BLOCKS @@ -364,6 +366,7 @@ public class SpriteLoader { } public static SpriteList load() { + log.info("Loading sprites"); return new SpriteList<>(SPRITES.class, SPRITES_MAP); } } diff --git a/src/main/java/cz/jzitnik/game/logic/CustomLogicProvider.java b/src/main/java/cz/jzitnik/game/logic/CustomLogicProvider.java index d55e359..d7ee8ae 100644 --- a/src/main/java/cz/jzitnik/game/logic/CustomLogicProvider.java +++ b/src/main/java/cz/jzitnik/game/logic/CustomLogicProvider.java @@ -6,18 +6,23 @@ import java.util.Set; import cz.jzitnik.game.Game; import cz.jzitnik.game.annotations.CustomLogic; +import lombok.extern.slf4j.Slf4j; + import org.reflections.Reflections; +@Slf4j public class CustomLogicProvider { private final List logicList = new ArrayList<>(); public void update(Game game) { for (CustomLogicInterface logicInterface : logicList) { + log.debug("Running logic {}.", logicInterface.getClass().getSimpleName()); logicInterface.nextIteration(game); } } public CustomLogicProvider() { + log.info("Loading logic"); registerHandlers(); } @@ -30,6 +35,7 @@ public class CustomLogicProvider { try { CustomLogicInterface instance = (CustomLogicInterface) clazz.getDeclaredConstructor().newInstance(); logicList.add(instance); + log.info("Loaded custom logic with name {}", clazz.getSimpleName()); } catch (Exception e) { e.printStackTrace(); } diff --git a/src/main/java/cz/jzitnik/game/mobs/EntityLogicProvider.java b/src/main/java/cz/jzitnik/game/mobs/EntityLogicProvider.java index 11a8746..87ce4e9 100644 --- a/src/main/java/cz/jzitnik/game/mobs/EntityLogicProvider.java +++ b/src/main/java/cz/jzitnik/game/mobs/EntityLogicProvider.java @@ -10,8 +10,11 @@ import cz.jzitnik.game.annotations.EntityLogic; import cz.jzitnik.game.entities.Block; import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + import org.reflections.Reflections; +@Slf4j public class EntityLogicProvider { private static final int CHUNK_SIZE = 20; public final HashMap logicList = new HashMap<>(); @@ -26,6 +29,7 @@ public class EntityLogicProvider { } public void update(Game game) { + log.debug("Updating all entities"); int[] playerLocation = game.getPlayerCords(); int playerX = playerLocation[0]; int playerY = playerLocation[1]; @@ -56,11 +60,15 @@ public class EntityLogicProvider { if (!logicList.containsKey(entityLogicMobDTO.getMob().getBlockId())) { return; } + var logic = logicList.get(entityLogicMobDTO.getMob().getBlockId()); - logicList.get(entityLogicMobDTO.getMob().getBlockId()).nextIteration(entityLogicMobDTO); + log.debug("Updating entity {} using logic {} on coordinates x:{},y:{}", entityLogicMobDTO.getMob().getBlockId(), + logic.getClass().getSimpleName(), entityLogicMobDTO.getX(), entityLogicMobDTO.getY()); + logic.nextIteration(entityLogicMobDTO); } public EntityLogicProvider() { + log.info("Loading entity logic"); registerHandlers(); } @@ -74,6 +82,7 @@ public class EntityLogicProvider { EntityLogicInterface instance = (EntityLogicInterface) clazz.getDeclaredConstructor().newInstance(); EntityLogic annotation = clazz.getAnnotation(EntityLogic.class); logicList.put(annotation.value(), instance); + log.info("Loaded logic for entity {}", annotation.value()); } catch (Exception e) { e.printStackTrace(); } diff --git a/src/main/java/cz/jzitnik/game/threads/ThreadProvider.java b/src/main/java/cz/jzitnik/game/threads/ThreadProvider.java index f618c53..54b63f7 100644 --- a/src/main/java/cz/jzitnik/game/threads/ThreadProvider.java +++ b/src/main/java/cz/jzitnik/game/threads/ThreadProvider.java @@ -8,10 +8,12 @@ import cz.jzitnik.game.Game; import cz.jzitnik.game.annotations.ThreadRegistry; import cz.jzitnik.game.entities.Player; import cz.jzitnik.tui.ScreenRenderer; +import lombok.extern.slf4j.Slf4j; import org.jline.terminal.Terminal; import org.reflections.Reflections; +@Slf4j public class ThreadProvider { private final Game game; private final ScreenRenderer screenRenderer; @@ -20,6 +22,7 @@ public class ThreadProvider { private final List list = new ArrayList<>(); public void start() { + log.info("Loading all the threads"); for (Thread thread : list) { thread.start(); } diff --git a/src/main/java/cz/jzitnik/tui/ResourceLoader.java b/src/main/java/cz/jzitnik/tui/ResourceLoader.java index 9ff199d..39a1f9f 100644 --- a/src/main/java/cz/jzitnik/tui/ResourceLoader.java +++ b/src/main/java/cz/jzitnik/tui/ResourceLoader.java @@ -4,8 +4,12 @@ import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; +import lombok.extern.slf4j.Slf4j; + +@Slf4j public class ResourceLoader { public static String loadResource(String fileName) { + log.debug("Loading resource: {}", "textures/" + fileName); try (InputStream inputStream = ResourceLoader.class.getClassLoader() .getResourceAsStream("textures/" + fileName)) { if (inputStream == null) { diff --git a/src/main/java/cz/jzitnik/tui/ScreenRenderer.java b/src/main/java/cz/jzitnik/tui/ScreenRenderer.java index f3d9c2d..3b1e2da 100644 --- a/src/main/java/cz/jzitnik/tui/ScreenRenderer.java +++ b/src/main/java/cz/jzitnik/tui/ScreenRenderer.java @@ -11,12 +11,15 @@ import cz.jzitnik.game.ui.Healthbar; import cz.jzitnik.tui.utils.SpriteCombiner; import lombok.Getter; import lombok.Setter; +import lombok.extern.slf4j.Slf4j; + import org.jline.terminal.Terminal; import java.util.ArrayList; import java.util.List; import java.util.Optional; +@Slf4j public class ScreenRenderer { private final SpriteList spriteList; private final Terminal terminal; @@ -43,6 +46,7 @@ public class ScreenRenderer { } public synchronized void render(Game game) { + log.debug("Rendering frame"); var world = game.getWorld(); StringBuilder main = new StringBuilder(); main.append("\033[H\033[2J"); @@ -154,6 +158,7 @@ public class ScreenRenderer { } } + log.debug("Frame rendered"); System.out.println(main); } diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml new file mode 100644 index 0000000..d756505 --- /dev/null +++ b/src/main/resources/logback.xml @@ -0,0 +1,40 @@ + + + logs/general.log + + + + logs/general.%d{yyyy-MM-dd}.%i.log.zip + + 10MB + + 30 + + 500MB + + + + ERROR + DENY + ACCEPT + + + + %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n + + + + + + ERROR + + + %d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n + + + + + + + +