diff --git a/external/gamekit b/external/gamekit
index eca073ea4..1e8b6c860 160000
--- a/external/gamekit
+++ b/external/gamekit
@@ -1 +1 @@
-Subproject commit eca073ea4ae4758477e0f931c7e8d8bd8216fc2e
+Subproject commit 1e8b6c860bff1da20880a93c852754a879eed56c
diff --git a/source/client/core/ClientApplication.cpp b/source/client/core/ClientApplication.cpp
index 9fecfe147..2a059686e 100644
--- a/source/client/core/ClientApplication.cpp
+++ b/source/client/core/ClientApplication.cpp
@@ -49,13 +49,14 @@ ClientApplication::ClientApplication(int argc, char **argv) : gk::CoreApplicatio
}
void ClientApplication::init() {
- m_argumentParser.addArgument("host", {"-h", "--host", "Select the host to connect to.", "host"});
- m_argumentParser.addArgument("port", {"-p", "--port", "Select the port to use.", "port"});
+ m_argumentParser.addArgument("host", {"-h", "--host", "Select the host to connect to.", "host"});
+ m_argumentParser.addArgument("port", {"-p", "--port", "Select the port to use.", "port"});
m_argumentParser.addArgument("singleplayer", {"-s", "--singleplayer", "Start in singleplayer mode."});
- m_argumentParser.addArgument("multiplayer", {"-m", "--multiplayer", "Start in multiplayer mode."});
- m_argumentParser.addArgument("working-dir", {"-w", "--working-dir", "Change the working directory to
.", "dir"});
+ m_argumentParser.addArgument("multiplayer", {"-m", "--multiplayer", "Start in multiplayer mode."});
+ m_argumentParser.addArgument("working-dir", {"-w", "--working-dir", "Change the working directory to .", "dir"});
m_argumentParser.addArgument("texture-pack", {"-t", "--texture-pack", "Use texture pack .", "name"});
- m_argumentParser.addArgument("username", {"-u", "--username", "Use when using -m or -s", "username"});
+ m_argumentParser.addArgument("username", {"-u", "--username", "Use when using -m or -s", "username"});
+ m_argumentParser.addArgument("log-level", {"-l", "--log-level", "Choose the log level (debug, info, warning, error)", "level"});
m_loggerHandler.setName("client");
@@ -71,6 +72,21 @@ void ClientApplication::init() {
if (m_argumentParser.getArgument("help").isFound)
return;
+ if (m_argumentParser.getArgument("log-level").isFound) {
+ std::unordered_map levels = {
+ {"debug", gk::LogLevel::Debug},
+ {"info", gk::LogLevel::Info},
+ {"warning", gk::LogLevel::Warning},
+ {"error", gk::LogLevel::Error},
+ };
+
+ auto it = levels.find(m_argumentParser.getArgument("log-level").parameter);
+ if (it != levels.end())
+ m_loggerHandler.setMaxLevel(it->second);
+ else
+ gkWarning() << ("Failed to set log level to '" + m_argumentParser.getArgument("log-level").parameter + "': Invalid value").c_str();
+ }
+
if (m_argumentParser.getArgument("working-dir").isFound)
fs::current_path(m_argumentParser.getArgument("working-dir").parameter);
diff --git a/source/client/states/TitleScreenState.cpp b/source/client/states/TitleScreenState.cpp
index 257fd56fe..8de2877d0 100644
--- a/source/client/states/TitleScreenState.cpp
+++ b/source/client/states/TitleScreenState.cpp
@@ -122,12 +122,14 @@ void TitleScreenState::startSingleplayer(bool showLoadingState, const std::strin
if (m_thread.joinable())
m_thread.join();
- m_thread = std::thread([this, worldName] () {
+ gk::LogLevel logLevel = gk::LoggerHandler::getInstance().maxLevel();
+ m_thread = std::thread([this, worldName, logLevel] () {
ServerApplication app{*m_eventHandler};
if (!worldName.empty())
app.setWorldName(worldName);
+ app.setLogLevel(logLevel);
app.setSingleplayer(true);
app.setPort(sf::Socket::AnyPort);
app.run();
diff --git a/source/server/core/ServerApplication.cpp b/source/server/core/ServerApplication.cpp
index fa5eb126b..f261ba707 100644
--- a/source/server/core/ServerApplication.cpp
+++ b/source/server/core/ServerApplication.cpp
@@ -63,14 +63,15 @@ ServerApplication::ServerApplication(gk::EventHandler &eventHandler) {
bool ServerApplication::init() {
std::srand(std::time(nullptr));
- m_loggerHandler.setName("server");
gk::LoggerHandler::setInstance(m_loggerHandler);
+ m_loggerHandler.setName("server");
BlockGeometry::initOrientation();
m_argumentParser.addArgument("port", {"-p", "--port", "Select the port to use.", "port"});
m_argumentParser.addArgument("world", {"-w", "--world", "Select a world to use.", "world"});
m_argumentParser.addArgument("working-dir", {"-d", "--working-dir", "Change the working directory to .", "dir"});
+ m_argumentParser.addArgument("log-level", {"-l", "--log-level", "Choose the log level (debug, info, warning, error)", "level"});
m_argumentParser.parse();
@@ -93,6 +94,21 @@ bool ServerApplication::init() {
if (m_argumentParser.getArgument("world").isFound)
m_worldName = m_argumentParser.getArgument("world").parameter;
+ if (m_argumentParser.getArgument("log-level").isFound) {
+ std::unordered_map levels = {
+ {"debug", gk::LogLevel::Debug},
+ {"info", gk::LogLevel::Info},
+ {"warning", gk::LogLevel::Warning},
+ {"error", gk::LogLevel::Error},
+ };
+
+ auto it = levels.find(m_argumentParser.getArgument("log-level").parameter);
+ if (it != levels.end())
+ m_loggerHandler.setMaxLevel(it->second);
+ else
+ gkWarning() << ("Failed to set log level to '" + m_argumentParser.getArgument("log-level").parameter + "': Invalid value").c_str();
+ }
+
ServerConfig::loadConfigFromFile("config/server.lua");
m_server.init(m_port);
diff --git a/source/server/core/ServerApplication.hpp b/source/server/core/ServerApplication.hpp
index e844d81a5..1c160b24f 100644
--- a/source/server/core/ServerApplication.hpp
+++ b/source/server/core/ServerApplication.hpp
@@ -52,6 +52,7 @@ class ServerApplication {
void setSingleplayer(bool isSingleplayer) { m_server.setSingleplayer(isSingleplayer); }
void setPort(u16 port) { m_port = port; }
void setWorldName(const std::string &worldName) { m_worldName = worldName; }
+ void setLogLevel(gk::LogLevel logLevel) { m_loggerHandler.setMaxLevel(logLevel); }
private:
void update();