From 045bcf6dc50bb58c22880c0a7b4e4a9e14813490 Mon Sep 17 00:00:00 2001 From: P0nk Date: Wed, 7 Apr 2021 17:23:14 +0200 Subject: [PATCH 1/2] Set up Slf4j and Log4j2 for logging All logs are kept in the "logs" directory as before. The most recent logs (up to 20MB) are kept in cosmic-log.log in the root of "logs". Previous logs (either from previous server starts or logfiles that exceeded max size of 20MB) are stored away in directories according to their creation date. --- pom.xml | 34 ++++++++++++++++++++++++---------- src/main/resources/log4j2.xml | 30 ++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 10 deletions(-) create mode 100644 src/main/resources/log4j2.xml diff --git a/pom.xml b/pom.xml index 7341ff2b53..629bf42035 100644 --- a/pom.xml +++ b/pom.xml @@ -15,6 +15,8 @@ 1.8 1.8 net.server.Server + + 2.14.1 @@ -33,21 +35,33 @@ mysql-connector-java 8.0.23 - - org.slf4j - slf4j-api - 1.7.21 - - - org.slf4j - slf4j-jdk14 - 1.7.5 - com.esotericsoftware.yamlbeans yamlbeans 1.13 + + + + org.slf4j + slf4j-api + 1.7.30 + + + org.apache.logging.log4j + log4j-core + ${log4j.version} + + + org.apache.logging.log4j + log4j-api + ${log4j.version} + + + org.apache.logging.log4j + log4j-slf4j-impl + ${log4j.version} + diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml new file mode 100644 index 0000000000..286496cbf0 --- /dev/null +++ b/src/main/resources/log4j2.xml @@ -0,0 +1,30 @@ + + + + cosmic-log + + + + + + + + %d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n + + + + + + + + + + + + + + + + \ No newline at end of file From b3c1259580f8a132eca585b3cf4e7960e7a641f5 Mon Sep 17 00:00:00 2001 From: P0nk Date: Wed, 7 Apr 2021 18:13:54 +0200 Subject: [PATCH 2/2] Use new logging for all startup messages --- src/main/java/net/server/Server.java | 34 +++++----- src/main/java/net/server/channel/Channel.java | 63 +++++++------------ src/main/java/tools/DatabaseConnection.java | 18 +++--- 3 files changed, 50 insertions(+), 65 deletions(-) diff --git a/src/main/java/net/server/Server.java b/src/main/java/net/server/Server.java index 96c5577383..0c74945ade 100644 --- a/src/main/java/net/server/Server.java +++ b/src/main/java/net/server/Server.java @@ -59,6 +59,8 @@ import org.apache.mina.core.service.IoAcceptor; import org.apache.mina.core.session.IdleStatus; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.transport.socket.nio.NioSocketAcceptor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import server.CashShop.CashItemFactory; import server.MapleSkillbookInformationProvider; import server.ThreadManager; @@ -84,7 +86,7 @@ import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.locks.Lock; public class Server { - + private static final Logger log = LoggerFactory.getLogger(Server.class); private static Server instance = null; public static Server getInstance() { @@ -385,7 +387,7 @@ public class Server { wldRLock.unlock(); } - System.out.println("Starting world " + i); + log.info("Starting world {}", i); int exprate = YamlConfig.config.worlds.get(i).exp_rate; int mesorate = YamlConfig.config.worlds.get(i).meso_rate; @@ -431,10 +433,10 @@ public class Server { if (canDeploy) { world.setServerMessage(YamlConfig.config.worlds.get(i).server_message); - System.out.println("Finished loading world " + i + "\r\n"); + log.info("Finished loading world {}", i); return i; } else { - System.out.println("Could not load world " + i + "...\r\n"); + log.error("Could not load world {}...", i); world.shutdown(); return -2; } @@ -815,7 +817,7 @@ public class Server { } public void init() { - System.out.println("Cosmic v" + ServerConstants.VERSION + " starting up.\r\n"); + log.info("Cosmic v{} starting up.", ServerConstants.VERSION); if (YamlConfig.config.server.SHUTDOWNHOOK) { Runtime.getRuntime().addShutdownHook(new Thread(shutdown(false))); @@ -853,16 +855,19 @@ public class Server { long timeToTake = System.currentTimeMillis(); SkillFactory.loadAllSkills(); - System.out.println("Skills loaded in " + ((System.currentTimeMillis() - timeToTake) / 1000.0) + " seconds"); + final double skillLoadTime = (System.currentTimeMillis() - timeToTake) / 1000.0; + log.info("Skills loaded in {} seconds", skillLoadTime); timeToTake = System.currentTimeMillis(); CashItemFactory.getSpecialCashItems(); - System.out.println("Items loaded in " + ((System.currentTimeMillis() - timeToTake) / 1000.0) + " seconds"); + final double itemLoadTime = (System.currentTimeMillis() - timeToTake) / 1000.0; + log.info("Items loaded in {} seconds", itemLoadTime); timeToTake = System.currentTimeMillis(); MapleQuest.loadAllQuest(); - System.out.println("Quest loaded in " + ((System.currentTimeMillis() - timeToTake) / 1000.0) + " seconds\r\n"); + final double questLoadTime = (System.currentTimeMillis() - timeToTake) / 1000.0; + log.info("Quest loaded in {} seconds", questLoadTime); NewYearCardRecord.startPendingNewYearCardRequests(); @@ -882,20 +887,17 @@ public class Server { loadPlayerNpcMapStepFromDb(); } catch (Exception e) { e.printStackTrace();//For those who get errors - System.out.println("[SEVERE] Syntax error in 'world.ini'."); + log.error("[SEVERE] Syntax error in 'world.ini'."); System.exit(0); } - System.out.println(); - if (YamlConfig.config.server.USE_FAMILY_SYSTEM) { timeToTake = System.currentTimeMillis(); MapleFamily.loadAllFamilies(); - System.out.println("Families loaded in " + ((System.currentTimeMillis() - timeToTake) / 1000.0) + " seconds\r\n"); + final double familyLoadTime = (System.currentTimeMillis() - timeToTake) / 1000.0; + log.info("Families loaded in {} seconds", familyLoadTime); } - System.out.println(); - IoBuffer.setUseDirectBuffer(false); // join IO operations performed by lxconan IoBuffer.setAllocator(new SimpleBufferAllocator()); acceptor = new NioSocketAcceptor(); @@ -908,9 +910,9 @@ public class Server { ex.printStackTrace(); } - System.out.println("Listening on port 8484\r\n\r\n"); + log.info("Listening on port 8484"); - System.out.println("Cosmic is now online.\r\n"); + log.info("Cosmic is now online."); online = true; MapleSkillbookInformationProvider.getInstance(); diff --git a/src/main/java/net/server/channel/Channel.java b/src/main/java/net/server/channel/Channel.java index 9d3ff78bd5..942f86046f 100644 --- a/src/main/java/net/server/channel/Channel.java +++ b/src/main/java/net/server/channel/Channel.java @@ -21,42 +21,24 @@ along with this program. If not, see . */ package net.server.channel; -import java.io.File; -import java.net.InetSocketAddress; -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.HashMap; -import java.util.List; -import java.util.Collections; -import java.util.HashSet; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import java.util.WeakHashMap; -import java.util.concurrent.ScheduledFuture; - -import net.server.audit.locks.MonitoredReadLock; -import net.server.audit.locks.MonitoredWriteLock; -import net.server.audit.locks.factory.MonitoredReadLockFactory; -import net.server.audit.locks.factory.MonitoredWriteLockFactory; - +import client.MapleCharacter; import config.YamlConfig; -import net.server.audit.LockCollector; -import net.server.audit.locks.MonitoredLockType; -import net.server.audit.locks.MonitoredReentrantLock; -import net.server.audit.locks.MonitoredReentrantReadWriteLock; -import net.server.audit.locks.factory.MonitoredReentrantLockFactory; - +import constants.game.GameConstants; import net.MapleServerHandler; import net.mina.MapleCodecFactory; - import net.server.PlayerStorage; import net.server.Server; - -import net.server.world.World; +import net.server.audit.LockCollector; +import net.server.audit.locks.*; +import net.server.audit.locks.factory.MonitoredReadLockFactory; +import net.server.audit.locks.factory.MonitoredReentrantLockFactory; +import net.server.audit.locks.factory.MonitoredWriteLockFactory; +import net.server.services.BaseService; +import net.server.services.ServicesManager; +import net.server.services.type.ChannelServices; import net.server.world.MapleParty; import net.server.world.MaplePartyCharacter; - +import net.server.world.World; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.buffer.SimpleBufferAllocator; import org.apache.mina.core.filterchain.IoFilter; @@ -65,26 +47,25 @@ import org.apache.mina.core.session.IdleStatus; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.transport.socket.SocketSessionConfig; import org.apache.mina.transport.socket.nio.NioSocketAcceptor; - -import client.MapleCharacter; -import constants.game.GameConstants; -import net.server.services.ServicesManager; -import net.server.services.BaseService; -import net.server.services.type.ChannelServices; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import scripting.event.EventScriptManager; import server.TimerManager; import server.events.gm.MapleEvent; import server.expeditions.MapleExpedition; import server.expeditions.MapleExpeditionType; -import server.maps.MapleHiredMerchant; -import server.maps.MapleMap; -import server.maps.MapleMapManager; -import server.maps.MapleMiniDungeon; -import server.maps.MapleMiniDungeonInfo; +import server.maps.*; import tools.MaplePacketCreator; import tools.Pair; +import java.io.File; +import java.net.InetSocketAddress; +import java.util.*; +import java.util.Map.Entry; +import java.util.concurrent.ScheduledFuture; + public final class Channel { + private static final Logger log = LoggerFactory.getLogger(Channel.class); private int port = 7575; private PlayerStorage players = new PlayerStorage(); @@ -173,7 +154,7 @@ public final class Channel { services = new ServicesManager(ChannelServices.OVERALL); - System.out.println(" Channel " + getId() + ": Listening on port " + port); + log.info("Channel {}: Listening on port {}", getId(), port); } catch (Exception e) { e.printStackTrace(); } diff --git a/src/main/java/tools/DatabaseConnection.java b/src/main/java/tools/DatabaseConnection.java index 875bf7ef44..ba74ee0f18 100644 --- a/src/main/java/tools/DatabaseConnection.java +++ b/src/main/java/tools/DatabaseConnection.java @@ -1,22 +1,24 @@ package tools; +import com.zaxxer.hikari.HikariConfig; +import com.zaxxer.hikari.HikariDataSource; +import config.YamlConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.sql.Connection; import java.sql.SQLException; import java.time.Duration; import java.time.Instant; import java.util.concurrent.TimeUnit; -import com.zaxxer.hikari.HikariConfig; -import com.zaxxer.hikari.HikariDataSource; - -import config.YamlConfig; - /** * @author Frz (Big Daddy) * @author The Real Spookster - some modifications to this beautiful code * @author Ronan - some connection pool to this beautiful code */ public class DatabaseConnection { + private static final Logger log = LoggerFactory.getLogger(DatabaseConnection.class); private static HikariDataSource dataSource; public static Connection getConnection() throws SQLException { @@ -61,17 +63,17 @@ public class DatabaseConnection { * @return true if connection to the database initiated successfully, false if not successful */ public static boolean initializeConnectionPool() { - System.out.println("Initializing connection pool..."); + log.info("Initializing connection pool..."); final HikariConfig config = getConfig(); Instant initStart = Instant.now(); try { dataSource = new HikariDataSource(config); long initDuration = Duration.between(initStart, Instant.now()).toMillis(); - System.out.printf("Connection pool initialized in %d ms%n", initDuration); + log.info("Connection pool initialized in {} ms", initDuration); return true; } catch (Exception e) { long timeout = Duration.between(initStart, Instant.now()).getSeconds(); - System.err.printf("Failed to initialize database connection pool. Gave up after %d seconds.%n", timeout); + log.error("Failed to initialize database connection pool. Gave up after {} seconds.", timeout); } // Timed out - failed to initialize