style(startup): improve universal console layout

Keep the Morningstar ASCII logo while using a structured plain-text startup card that works in CMD, Windows Terminal, and other consoles without ANSI support.

Compact the Logback console pattern to use simple class names, clean separators, and a wider message column so startup logs do not wrap as aggressively. Simplify Infostand startup output to a one-line asset count while preserving category breakdown at DEBUG level.

Also normalize generic server start/stop messages so Game Server and RCON Server are labeled correctly instead of being glued to host:port output.
This commit is contained in:
simoleo89
2026-06-13 16:43:40 +02:00
parent ea55258979
commit 9edb984f56
7 changed files with 40 additions and 8 deletions
@@ -317,6 +317,12 @@ public final class Emulator {
static String startupHero() {
return "\n" +
" __ __ ___ ____ _ _ ___ _ _ ____ ____ _____ _ ____ \n" +
" | \\/ |/ _ \\| _ \\| \\ | |_ _| \\ | |/ ___/ ___|_ _|/ \\ | _ \\ \n" +
" | |\\/| | | | | |_) | \\| || || \\| | | _\\___ \\ | | / _ \\ | |_) |\n" +
" | | | | |_| | _ <| |\\ || || |\\ | |_| |___) || |/ ___ \\| _ < \n" +
" |_| |_|\\___/|_| \\_\\_| \\_|___|_| \\_|\\____|____/ |_/_/ \\_\\_| \\_\\\n" +
"\n" +
"+------------------------------------------------------------------------------+\n" +
"| MORNINGSTAR EXTENDED |\n" +
"| Arcturus game server runtime |\n" +
@@ -96,6 +96,12 @@ public class InfostandBackgroundManager {
this.entries.get(Category.OVERLAY).size(),
this.entries.get(Category.CARD).size(),
this.entries.get(Category.BORDER).size()));
LOGGER.debug("Infostand Background Manager assets: {} bg, {} stands, {} overlays, {} cards, {} borders",
this.entries.get(Category.BACKGROUND).size(),
this.entries.get(Category.STAND).size(),
this.entries.get(Category.OVERLAY).size(),
this.entries.get(Category.CARD).size(),
this.entries.get(Category.BORDER).size());
} else {
LOGGER.info("InfostandBackgroundManager -> infostand_backgrounds is empty, server-side validation disabled (only range clamp will apply).");
}
@@ -103,8 +109,7 @@ public class InfostandBackgroundManager {
static String summary(int backgrounds, int stands, int overlays, int cards, int borders) {
int total = backgrounds + stands + overlays + cards + borders;
return String.format("Infostand Background Manager -> Loaded! (%d assets: %d bg, %d stands, %d overlays, %d cards, %d borders)",
total, backgrounds, stands, overlays, cards, borders);
return String.format("Infostand Background Manager -> Loaded! (%d assets)", total);
}
public boolean canUse(Habbo habbo, Category category, int id) {
@@ -85,10 +85,10 @@ public abstract class Server {
}
if (!channelFuture.isSuccess()) {
LOGGER.info("Failed to connect to the host ({}:{})@{}", this.host, this.port, this.name);
LOGGER.info("Failed to start {} on {}:{}", this.name, this.host, this.port);
System.exit(0);
} else {
LOGGER.info("Started GameServer on {}:{}@{}", this.host, this.port, this.name);
LOGGER.info("Started {} on {}:{}", this.name, this.host, this.port);
}
}
@@ -100,7 +100,7 @@ public abstract class Server {
} catch(InterruptedException e) {
LOGGER.error("Exception during {} shutdown... HARD STOP", this.name, e);
}
LOGGER.info("GameServer Stopped!");
LOGGER.info("Stopped {}", this.name);
}
public ServerBootstrap getServerBootstrap() {
+2 -2
View File
@@ -2,7 +2,7 @@
<configuration>
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%-14thread] %-5level %-36logger{36} - %msg%n</pattern>
<pattern>%d{HH:mm:ss.SSS} %-5level [%-12thread] %-22logger{0} | %msg%n</pattern>
</encoder>
</appender>
@@ -65,4 +65,4 @@
<appender-ref ref="FileErrors" />
<appender-ref ref="FileErrorsSql" />
</root>
</configuration>
</configuration>
@@ -0,0 +1,20 @@
package com.eu.habbo;
import org.junit.jupiter.api.Test;
import java.nio.file.Files;
import java.nio.file.Path;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
class ConsoleLogbackLayoutTest {
@Test
void consolePatternKeepsStartupMessagesReadable() throws Exception {
String logback = Files.readString(Path.of("src/main/resources/logback.xml"));
assertTrue(logback.contains("%-22logger{0}"), "console should show compact class names");
assertTrue(logback.contains("| %msg%n"), "console should leave a clear message column");
assertFalse(logback.contains("%-36logger{36}"), "wide package loggers waste console space");
}
}
@@ -10,6 +10,7 @@ class EmulatorStartupConsoleTest {
void startupHeroUsesUniversalAsciiLayout() {
String hero = Emulator.startupHero();
assertTrue(hero.contains("__ __ ___ ____"));
assertTrue(hero.contains("MORNINGSTAR EXTENDED"));
assertTrue(hero.contains("Version"));
assertTrue(hero.contains("Build"));
@@ -8,7 +8,7 @@ class InfostandBackgroundManagerTest {
@Test
void summaryKeepsStartupLogCompact() {
assertEquals(
"Infostand Background Manager -> Loaded! (260 assets: 188 bg, 22 stands, 9 overlays, 16 cards, 25 borders)",
"Infostand Background Manager -> Loaded! (260 assets)",
InfostandBackgroundManager.summary(188, 22, 9, 16, 25));
}
}