chore(logging): Implemented basic logging
This commit is contained in:
parent
c1674d7866
commit
b6c0e730d3
6
pom.xml
6
pom.xml
@ -124,9 +124,9 @@
|
|||||||
<version>2.0.17</version>
|
<version>2.0.17</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.slf4j</groupId>
|
<groupId>ch.qos.logback</groupId>
|
||||||
<artifactId>slf4j-simple</artifactId>
|
<artifactId>logback-classic</artifactId>
|
||||||
<version>2.0.17</version>
|
<version>1.5.18</version> <!-- latest at the time -->
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
@ -7,19 +7,23 @@ import cz.jzitnik.game.threads.ThreadProvider;
|
|||||||
import cz.jzitnik.game.ui.*;
|
import cz.jzitnik.game.ui.*;
|
||||||
import cz.jzitnik.game.SpriteLoader;
|
import cz.jzitnik.game.SpriteLoader;
|
||||||
import cz.jzitnik.tui.ScreenRenderer;
|
import cz.jzitnik.tui.ScreenRenderer;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import org.jline.terminal.Terminal;
|
import org.jline.terminal.Terminal;
|
||||||
import org.jline.terminal.TerminalBuilder;
|
import org.jline.terminal.TerminalBuilder;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
public class Main {
|
public class Main {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
try {
|
try {
|
||||||
|
log.info("Setting up terminal");
|
||||||
Terminal terminal = TerminalBuilder.terminal();
|
Terminal terminal = TerminalBuilder.terminal();
|
||||||
terminal.enterRawMode();
|
terminal.enterRawMode();
|
||||||
|
|
||||||
if (!terminal.hasMouseSupport()) {
|
if (!terminal.hasMouseSupport()) {
|
||||||
System.out.println("Error: This terminal does not support mouse.");
|
log.error("This terminal does not support mouse");
|
||||||
System.exit(1);
|
System.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,6 +60,7 @@ public class Main {
|
|||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.info("Closing terminal");
|
||||||
terminal.trackMouse(Terminal.MouseTracking.Off);
|
terminal.trackMouse(Terminal.MouseTracking.Off);
|
||||||
terminal.close();
|
terminal.close();
|
||||||
} catch (IOException | InterruptedException ignored) {
|
} catch (IOException | InterruptedException ignored) {
|
||||||
|
@ -2,6 +2,9 @@ package cz.jzitnik.game;
|
|||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
public class GameSaver {
|
public class GameSaver {
|
||||||
public void save(Game game) {
|
public void save(Game game) {
|
||||||
try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("world.ser"))) {
|
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() {
|
public static Game load() {
|
||||||
|
log.info("Loading game");
|
||||||
File file = new File("world.ser");
|
File file = new File("world.ser");
|
||||||
|
|
||||||
if (!file.isFile()) {
|
if (!file.isFile()) {
|
||||||
@ -19,6 +24,7 @@ public class GameSaver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
log.info("Loading game from save file");
|
||||||
FileInputStream fileIn = new FileInputStream("world.ser");
|
FileInputStream fileIn = new FileInputStream("world.ser");
|
||||||
|
|
||||||
ObjectInputStream in = new ObjectInputStream(fileIn);
|
ObjectInputStream in = new ObjectInputStream(fileIn);
|
||||||
|
@ -3,9 +3,11 @@ package cz.jzitnik.game;
|
|||||||
import cz.jzitnik.game.sprites.*;
|
import cz.jzitnik.game.sprites.*;
|
||||||
import cz.jzitnik.tui.Sprite;
|
import cz.jzitnik.tui.Sprite;
|
||||||
import cz.jzitnik.tui.SpriteList;
|
import cz.jzitnik.tui.SpriteList;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
public class SpriteLoader {
|
public class SpriteLoader {
|
||||||
public enum SPRITES {
|
public enum SPRITES {
|
||||||
// BLOCKS
|
// BLOCKS
|
||||||
@ -364,6 +366,7 @@ public class SpriteLoader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static SpriteList<SPRITES> load() {
|
public static SpriteList<SPRITES> load() {
|
||||||
|
log.info("Loading sprites");
|
||||||
return new SpriteList<>(SPRITES.class, SPRITES_MAP);
|
return new SpriteList<>(SPRITES.class, SPRITES_MAP);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,18 +6,23 @@ import java.util.Set;
|
|||||||
|
|
||||||
import cz.jzitnik.game.Game;
|
import cz.jzitnik.game.Game;
|
||||||
import cz.jzitnik.game.annotations.CustomLogic;
|
import cz.jzitnik.game.annotations.CustomLogic;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import org.reflections.Reflections;
|
import org.reflections.Reflections;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
public class CustomLogicProvider {
|
public class CustomLogicProvider {
|
||||||
private final List<CustomLogicInterface> logicList = new ArrayList<>();
|
private final List<CustomLogicInterface> logicList = new ArrayList<>();
|
||||||
|
|
||||||
public void update(Game game) {
|
public void update(Game game) {
|
||||||
for (CustomLogicInterface logicInterface : logicList) {
|
for (CustomLogicInterface logicInterface : logicList) {
|
||||||
|
log.debug("Running logic {}.", logicInterface.getClass().getSimpleName());
|
||||||
logicInterface.nextIteration(game);
|
logicInterface.nextIteration(game);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public CustomLogicProvider() {
|
public CustomLogicProvider() {
|
||||||
|
log.info("Loading logic");
|
||||||
registerHandlers();
|
registerHandlers();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -30,6 +35,7 @@ public class CustomLogicProvider {
|
|||||||
try {
|
try {
|
||||||
CustomLogicInterface instance = (CustomLogicInterface) clazz.getDeclaredConstructor().newInstance();
|
CustomLogicInterface instance = (CustomLogicInterface) clazz.getDeclaredConstructor().newInstance();
|
||||||
logicList.add(instance);
|
logicList.add(instance);
|
||||||
|
log.info("Loaded custom logic with name {}", clazz.getSimpleName());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
@ -10,8 +10,11 @@ import cz.jzitnik.game.annotations.EntityLogic;
|
|||||||
import cz.jzitnik.game.entities.Block;
|
import cz.jzitnik.game.entities.Block;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import org.reflections.Reflections;
|
import org.reflections.Reflections;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
public class EntityLogicProvider {
|
public class EntityLogicProvider {
|
||||||
private static final int CHUNK_SIZE = 20;
|
private static final int CHUNK_SIZE = 20;
|
||||||
public final HashMap<String, EntityLogicInterface> logicList = new HashMap<>();
|
public final HashMap<String, EntityLogicInterface> logicList = new HashMap<>();
|
||||||
@ -26,6 +29,7 @@ public class EntityLogicProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void update(Game game) {
|
public void update(Game game) {
|
||||||
|
log.debug("Updating all entities");
|
||||||
int[] playerLocation = game.getPlayerCords();
|
int[] playerLocation = game.getPlayerCords();
|
||||||
int playerX = playerLocation[0];
|
int playerX = playerLocation[0];
|
||||||
int playerY = playerLocation[1];
|
int playerY = playerLocation[1];
|
||||||
@ -56,11 +60,15 @@ public class EntityLogicProvider {
|
|||||||
if (!logicList.containsKey(entityLogicMobDTO.getMob().getBlockId())) {
|
if (!logicList.containsKey(entityLogicMobDTO.getMob().getBlockId())) {
|
||||||
return;
|
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() {
|
public EntityLogicProvider() {
|
||||||
|
log.info("Loading entity logic");
|
||||||
registerHandlers();
|
registerHandlers();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,6 +82,7 @@ public class EntityLogicProvider {
|
|||||||
EntityLogicInterface instance = (EntityLogicInterface) clazz.getDeclaredConstructor().newInstance();
|
EntityLogicInterface instance = (EntityLogicInterface) clazz.getDeclaredConstructor().newInstance();
|
||||||
EntityLogic annotation = clazz.getAnnotation(EntityLogic.class);
|
EntityLogic annotation = clazz.getAnnotation(EntityLogic.class);
|
||||||
logicList.put(annotation.value(), instance);
|
logicList.put(annotation.value(), instance);
|
||||||
|
log.info("Loaded logic for entity {}", annotation.value());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
@ -8,10 +8,12 @@ import cz.jzitnik.game.Game;
|
|||||||
import cz.jzitnik.game.annotations.ThreadRegistry;
|
import cz.jzitnik.game.annotations.ThreadRegistry;
|
||||||
import cz.jzitnik.game.entities.Player;
|
import cz.jzitnik.game.entities.Player;
|
||||||
import cz.jzitnik.tui.ScreenRenderer;
|
import cz.jzitnik.tui.ScreenRenderer;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import org.jline.terminal.Terminal;
|
import org.jline.terminal.Terminal;
|
||||||
import org.reflections.Reflections;
|
import org.reflections.Reflections;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
public class ThreadProvider {
|
public class ThreadProvider {
|
||||||
private final Game game;
|
private final Game game;
|
||||||
private final ScreenRenderer screenRenderer;
|
private final ScreenRenderer screenRenderer;
|
||||||
@ -20,6 +22,7 @@ public class ThreadProvider {
|
|||||||
private final List<Thread> list = new ArrayList<>();
|
private final List<Thread> list = new ArrayList<>();
|
||||||
|
|
||||||
public void start() {
|
public void start() {
|
||||||
|
log.info("Loading all the threads");
|
||||||
for (Thread thread : list) {
|
for (Thread thread : list) {
|
||||||
thread.start();
|
thread.start();
|
||||||
}
|
}
|
||||||
|
@ -4,8 +4,12 @@ import java.io.IOException;
|
|||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
public class ResourceLoader {
|
public class ResourceLoader {
|
||||||
public static String loadResource(String fileName) {
|
public static String loadResource(String fileName) {
|
||||||
|
log.debug("Loading resource: {}", "textures/" + fileName);
|
||||||
try (InputStream inputStream = ResourceLoader.class.getClassLoader()
|
try (InputStream inputStream = ResourceLoader.class.getClassLoader()
|
||||||
.getResourceAsStream("textures/" + fileName)) {
|
.getResourceAsStream("textures/" + fileName)) {
|
||||||
if (inputStream == null) {
|
if (inputStream == null) {
|
||||||
|
@ -11,12 +11,15 @@ import cz.jzitnik.game.ui.Healthbar;
|
|||||||
import cz.jzitnik.tui.utils.SpriteCombiner;
|
import cz.jzitnik.tui.utils.SpriteCombiner;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import org.jline.terminal.Terminal;
|
import org.jline.terminal.Terminal;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
public class ScreenRenderer {
|
public class ScreenRenderer {
|
||||||
private final SpriteList spriteList;
|
private final SpriteList spriteList;
|
||||||
private final Terminal terminal;
|
private final Terminal terminal;
|
||||||
@ -43,6 +46,7 @@ public class ScreenRenderer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void render(Game game) {
|
public synchronized void render(Game game) {
|
||||||
|
log.debug("Rendering frame");
|
||||||
var world = game.getWorld();
|
var world = game.getWorld();
|
||||||
StringBuilder main = new StringBuilder();
|
StringBuilder main = new StringBuilder();
|
||||||
main.append("\033[H\033[2J");
|
main.append("\033[H\033[2J");
|
||||||
@ -154,6 +158,7 @@ public class ScreenRenderer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.debug("Frame rendered");
|
||||||
System.out.println(main);
|
System.out.println(main);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
40
src/main/resources/logback.xml
Normal file
40
src/main/resources/logback.xml
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<configuration>
|
||||||
|
<appender name="GENERAL_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||||
|
<file>logs/general.log</file>
|
||||||
|
|
||||||
|
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||||
|
<!-- File name pattern for rolled logs -->
|
||||||
|
<fileNamePattern>logs/general.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
|
||||||
|
<!-- Max size before rotation -->
|
||||||
|
<maxFileSize>10MB</maxFileSize>
|
||||||
|
<!-- Max history (how many days to keep) -->
|
||||||
|
<maxHistory>30</maxHistory>
|
||||||
|
<!-- Total size cap -->
|
||||||
|
<totalSizeCap>500MB</totalSizeCap>
|
||||||
|
</rollingPolicy>
|
||||||
|
|
||||||
|
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||||
|
<level>ERROR</level>
|
||||||
|
<onMatch>DENY</onMatch>
|
||||||
|
<onMismatch>ACCEPT</onMismatch>
|
||||||
|
</filter>
|
||||||
|
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<appender name="ERROR_CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
||||||
|
<level>ERROR</level>
|
||||||
|
</filter>
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="TRACE">
|
||||||
|
<appender-ref ref="GENERAL_FILE" />
|
||||||
|
<appender-ref ref="ERROR_CONSOLE" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
Loading…
x
Reference in New Issue
Block a user