From fca4441229808891f460d5fbc4affd51e8896aa5 Mon Sep 17 00:00:00 2001 From: Petr Mrázek Date: Thu, 9 Jan 2014 01:22:34 +0100 Subject: Replace old launcher part with a shiny new one. No more garbage on the command line. --- logic/BaseInstance.cpp | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'logic/BaseInstance.cpp') diff --git a/logic/BaseInstance.cpp b/logic/BaseInstance.cpp index ac66a8d5..4fc6b9dc 100644 --- a/logic/BaseInstance.cpp +++ b/logic/BaseInstance.cpp @@ -26,6 +26,7 @@ #include "overridesetting.h" #include "pathutils.h" +#include #include "lists/MinecraftVersionList.h" #include "logic/icons/IconList.h" @@ -248,8 +249,14 @@ void BaseInstance::setName(QString val) d->m_settings->set("name", val); emit propertiesChanged(this); } + QString BaseInstance::name() const { I_D(BaseInstance); return d->m_settings->get("name").toString(); } + +QStringList BaseInstance::extraArguments() const +{ + return Util::Commandline::splitArgs(settings().get("JvmArgs").toString()); +} -- cgit From afd1778fd766011a968074d68241b42b1438fb18 Mon Sep 17 00:00:00 2001 From: Petr Mrázek Date: Sun, 12 Jan 2014 23:38:12 +0100 Subject: Fix window title problem on OSX. --- logic/BaseInstance.cpp | 5 +++++ logic/BaseInstance.h | 3 +++ logic/LegacyInstance.cpp | 2 +- logic/MinecraftProcess.cpp | 2 +- logic/OneSixInstance.cpp | 2 +- 5 files changed, 11 insertions(+), 3 deletions(-) (limited to 'logic/BaseInstance.cpp') diff --git a/logic/BaseInstance.cpp b/logic/BaseInstance.cpp index 4fc6b9dc..afe3dd03 100644 --- a/logic/BaseInstance.cpp +++ b/logic/BaseInstance.cpp @@ -256,6 +256,11 @@ QString BaseInstance::name() const return d->m_settings->get("name").toString(); } +QString BaseInstance::windowTitle() const +{ + return "MultiMC: " + name(); +} + QStringList BaseInstance::extraArguments() const { return Util::Commandline::splitArgs(settings().get("JvmArgs").toString()); diff --git a/logic/BaseInstance.h b/logic/BaseInstance.h index c059d058..353ea58a 100644 --- a/logic/BaseInstance.h +++ b/logic/BaseInstance.h @@ -71,6 +71,9 @@ public: QString name() const; void setName(QString val); + /// Value used for instance window titles + QString windowTitle() const; + QString iconKey() const; void setIconKey(QString val); diff --git a/logic/LegacyInstance.cpp b/logic/LegacyInstance.cpp index 4b650e37..2828bcbf 100644 --- a/logic/LegacyInstance.cpp +++ b/logic/LegacyInstance.cpp @@ -73,7 +73,7 @@ MinecraftProcess *LegacyInstance::prepareForLaunch(MojangAccountPtr account) .absolutePath(); launchScript += "userName " + account->currentProfile()->name + "\n"; launchScript += "sessionId " + account->sessionId() + "\n"; - launchScript += "windowTitle MultiMC: " + name() + "\n"; + launchScript += "windowTitle " + windowTitle() + "\n"; launchScript += "windowParams " + windowParams + "\n"; launchScript += "lwjgl " + lwjgl + "\n"; launchScript += "launch legacy\n"; diff --git a/logic/MinecraftProcess.cpp b/logic/MinecraftProcess.cpp index 153b462c..09d60771 100644 --- a/logic/MinecraftProcess.cpp +++ b/logic/MinecraftProcess.cpp @@ -195,7 +195,7 @@ void MinecraftProcess::launch() // OSX dock icon and name #ifdef OSX args << "-Xdock:icon=icon.png"; - args << QString("-Xdock:name=\"%1\"").arg(windowTitle); + args << QString("-Xdock:name=\"%1\"").arg(m_instance->windowTitle()); #endif // HACK: Stupid hack for Intel drivers. See: https://mojang.atlassian.net/browse/MCL-767 diff --git a/logic/OneSixInstance.cpp b/logic/OneSixInstance.cpp index a12cf047..16699a1d 100644 --- a/logic/OneSixInstance.cpp +++ b/logic/OneSixInstance.cpp @@ -228,7 +228,7 @@ MinecraftProcess *OneSixInstance::prepareForLaunch(MojangAccountPtr account) "param --height\nparam " + settings().get("MinecraftWinHeight").toString() + "\n"; } QDir natives_dir(PathCombine(instanceRoot(), "natives/")); - launchScript += "windowTitle MultiMC: " + name() + "\n"; + launchScript += "windowTitle " + windowTitle() + "\n"; launchScript += "natives " + natives_dir.absolutePath() + "\n"; launchScript += "launch onesix\n"; -- cgit From 188d0d58865f5e134b5803bda2cd631a61cf2915 Mon Sep 17 00:00:00 2001 From: Orochimarufan Date: Fri, 17 Jan 2014 22:55:10 +0100 Subject: Improve Console window output. -> Log Pre- and Post-Launch command happenings -> Enable the java part to specify the level TODO: fix logging with mc 1.7's log4j logging infrastructure Signed-off-by: Orochimarufan --- .gitignore | 14 +- MultiMC.cpp | 1 + depends/launcher/org/multimc/EntryPoint.java | 8 +- depends/launcher/org/multimc/Utils.java | 23 +++ .../org/multimc/legacy/LegacyLauncher.java | 28 +-- .../org/multimc/onesix/OneSixLauncher.java | 30 +-- gui/ConsoleWindow.cpp | 3 + logic/BaseInstance.cpp | 1 + logic/MinecraftProcess.cpp | 203 +++++++++++++++++---- logic/MinecraftProcess.h | 17 +- 10 files changed, 247 insertions(+), 81 deletions(-) (limited to 'logic/BaseInstance.cpp') diff --git a/.gitignore b/.gitignore index 54bd5039..2ef0d673 100644 --- a/.gitignore +++ b/.gitignore @@ -1,17 +1,23 @@ Thumbs.db .kdev4 -MultiMC5.kdev4 -MultiMC.pro.user -CMakeLists.txt.user .user .directory -build resources/CMakeFiles resources/MultiMCLauncher.jar *~ *.swp html/ +# Project Files +MultiMC5.kdev4 +MultiMC.pro.user +CMakeLists.txt.user +CMakeLists.txt.user.* + +# Build dirs +build +/build-* + # Ctags File tags diff --git a/MultiMC.cpp b/MultiMC.cpp index 7a82c642..e4a30f22 100644 --- a/MultiMC.cpp +++ b/MultiMC.cpp @@ -379,6 +379,7 @@ void MultiMC::initGlobalSettings() // Console m_settings->registerSetting("ShowConsole", true); m_settings->registerSetting("AutoCloseConsole", true); + m_settings->registerSetting("LogPrePostOutput", true); // Console Colors // m_settings->registerSetting("SysMessageColor", QColor(Qt::blue)); diff --git a/depends/launcher/org/multimc/EntryPoint.java b/depends/launcher/org/multimc/EntryPoint.java index c42e34e7..83f232f1 100644 --- a/depends/launcher/org/multimc/EntryPoint.java +++ b/depends/launcher/org/multimc/EntryPoint.java @@ -71,15 +71,15 @@ public class EntryPoint if(param.equals("legacy")) { m_launcher = new LegacyLauncher(); - System.out.println("Using legacy launcher."); - System.out.println(); + Utils.log("Using legacy launcher."); + Utils.log(); return Action.Launch; } if(param.equals("onesix")) { m_launcher = new OneSixLauncher(); - System.out.println("Using onesix launcher."); - System.out.println(); + Utils.log("Using onesix launcher."); + Utils.log(); return Action.Launch; } else diff --git a/depends/launcher/org/multimc/Utils.java b/depends/launcher/org/multimc/Utils.java index c4d55b6e..df0ef861 100644 --- a/depends/launcher/org/multimc/Utils.java +++ b/depends/launcher/org/multimc/Utils.java @@ -153,4 +153,27 @@ public class Utils } return null; } + + /** + * Log to the MultiMC console + * + * @param message A String containing the message + * @param level A String containing the level name. See MinecraftProcess::getLevel() + */ + public static void log(String message, String level) + { + // Kinda dirty + String tag = "!![" + level + "]!"; + System.out.println(tag + message.replace("\n", "\n" + tag)); + } + + public static void log(String message) + { + log(message, "MultiMC"); + } + + public static void log() + { + System.out.println(); + } } diff --git a/depends/launcher/org/multimc/legacy/LegacyLauncher.java b/depends/launcher/org/multimc/legacy/LegacyLauncher.java index 6a0a3014..1ca37c4a 100644 --- a/depends/launcher/org/multimc/legacy/LegacyLauncher.java +++ b/depends/launcher/org/multimc/legacy/LegacyLauncher.java @@ -102,20 +102,20 @@ public class LegacyLauncher implements Launcher // print the pretty things { - System.out.println("Main Class:"); - System.out.println(mainClass); - System.out.println(); + Utils.log("Main Class:"); + Utils.log(" " + mainClass); + Utils.log(); - System.out.println("Class Path:"); + Utils.log("Class Path:"); for (URL s : classpath) { - System.out.println(s); + Utils.log(" " + s); } - System.out.println(); + Utils.log(); - System.out.println("Native Path:"); - System.out.println(nativesDir); - System.out.println(); + Utils.log("Native Path:"); + Utils.log(" " + nativesDir); + Utils.log(); } URLClassLoader cl = new URLClassLoader(classpath, LegacyLauncher.class.getClassLoader()); @@ -149,7 +149,7 @@ public class LegacyLauncher implements Launcher mcArgs[0] = userName; mcArgs[1] = sessionId; - System.out.println("Launching with applet wrapper..."); + Utils.log("Launching with applet wrapper..."); try { Class MCAppletClass = cl.loadClass("net.minecraft.client.MinecraftApplet"); @@ -158,16 +158,16 @@ public class LegacyLauncher implements Launcher mcWindow.start(mcappl, userName, sessionId, winSize, maximize); } catch (Exception e) { - System.err.println("Applet wrapper failed:"); + Utils.log("Applet wrapper failed:", "Error"); e.printStackTrace(System.err); - System.err.println(); - System.out.println("Falling back to compatibility mode."); + Utils.log(); + Utils.log("Falling back to compatibility mode."); try { mc.getMethod("main", String[].class).invoke(null, (Object) mcArgs); } catch (Exception e1) { - System.err.println("Failed to invoke the Minecraft main class:"); + Utils.log("Failed to invoke the Minecraft main class:", "Fatal"); e1.printStackTrace(System.err); return -1; } diff --git a/depends/launcher/org/multimc/onesix/OneSixLauncher.java b/depends/launcher/org/multimc/onesix/OneSixLauncher.java index f25a3245..d6c80b67 100644 --- a/depends/launcher/org/multimc/onesix/OneSixLauncher.java +++ b/depends/launcher/org/multimc/onesix/OneSixLauncher.java @@ -74,37 +74,37 @@ public class OneSixLauncher implements Launcher // print the pretty things { - System.out.println("Main Class:"); - System.out.println(mainClass); - System.out.println(); + Utils.log("Main Class:"); + Utils.log(" " + mainClass); + Utils.log(); - System.out.println("Native paths:"); + Utils.log("Native paths:"); for (String s : allNativePaths) { - System.out.println(s); + Utils.log(" " + s); } - System.out.println(); + Utils.log(); - System.out.println("Libraries:"); + Utils.log("Libraries:"); for (String s : libraries) { - System.out.println(s); + Utils.log(" " + s); } - System.out.println(); + Utils.log(); if(mods.size() > 0) { - System.out.println("Class Path Mods:"); + Utils.log("Class Path Mods:"); for (String s : mods) { - System.out.println(s); + Utils.log(" " + s); } - System.out.println(); + Utils.log(); } - System.out.println("Params:"); - System.out.println(mcparams.toString()); - System.out.println(); + Utils.log("Params:"); + Utils.log(" " + mcparams.toString()); + Utils.log(); } final ClassLoader cl = ClassLoader.getSystemClassLoader(); diff --git a/gui/ConsoleWindow.cpp b/gui/ConsoleWindow.cpp index 54a74bde..dc36a8ff 100644 --- a/gui/ConsoleWindow.cpp +++ b/gui/ConsoleWindow.cpp @@ -140,6 +140,9 @@ void ConsoleWindow::write(QString data, MessageLevel::Enum mode) else if (mode == MessageLevel::Debug) while (iter.hasNext()) writeColor(iter.next(), "green"); + else if (mode == MessageLevel::PrePost) + while (iter.hasNext()) + writeColor(iter.next(), "grey"); // TODO: implement other MessageLevels else while (iter.hasNext()) diff --git a/logic/BaseInstance.cpp b/logic/BaseInstance.cpp index afe3dd03..222004a3 100644 --- a/logic/BaseInstance.cpp +++ b/logic/BaseInstance.cpp @@ -82,6 +82,7 @@ BaseInstance::BaseInstance(BaseInstancePrivate *d_in, const QString &rootDir, settings().registerSetting("OverrideConsole", false); settings().registerOverride(globalSettings->getSetting("ShowConsole")); settings().registerOverride(globalSettings->getSetting("AutoCloseConsole")); + settings().registerOverride(globalSettings->getSetting("LogPrePostOutput")); } void BaseInstance::iconUpdated(QString key) diff --git a/logic/MinecraftProcess.cpp b/logic/MinecraftProcess.cpp index 18d63674..84610021 100644 --- a/logic/MinecraftProcess.cpp +++ b/logic/MinecraftProcess.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include "BaseInstance.h" @@ -42,6 +43,7 @@ MinecraftProcess::MinecraftProcess(BaseInstance *inst) : m_instance(inst) #ifdef LINUX // Strip IBus + // IBus is a Linux IME framework. For some reason, it breaks MC? if (env.value("XMODIFIERS").contains(IBUS)) env.insert("XMODIFIERS", env.value("XMODIFIERS").replace(IBUS, "")); #endif @@ -57,6 +59,15 @@ MinecraftProcess::MinecraftProcess(BaseInstance *inst) : m_instance(inst) // std channels connect(this, SIGNAL(readyReadStandardError()), SLOT(on_stdErr())); connect(this, SIGNAL(readyReadStandardOutput()), SLOT(on_stdOut())); + + // Log prepost launch command output (can be disabled.) + if (m_instance->settings().get("LogPrePostOutput").toBool()) + { + connect(&m_prepostlaunchprocess, &QProcess::readyReadStandardError, + this, &MinecraftProcess::on_prepost_stdErr); + connect(&m_prepostlaunchprocess, &QProcess::readyReadStandardOutput, + this, &MinecraftProcess::on_prepost_stdOut); + } } void MinecraftProcess::setWorkdir(QString path) @@ -97,43 +108,133 @@ QString MinecraftProcess::censorPrivateInfo(QString in) } // console window +MessageLevel::Enum MinecraftProcess::guessLevel(const QString &line, MessageLevel::Enum level) +{ + if (line.contains("[INFO]") || line.contains("[CONFIG]") || line.contains("[FINE]") || + line.contains("[FINER]") || line.contains("[FINEST]")) + level = MessageLevel::Message; + if (line.contains("[SEVERE]") || line.contains("[STDERR]")) + level = MessageLevel::Error; + if (line.contains("[WARNING]")) + level = MessageLevel::Warning; + if (line.contains("Exception in thread") || line.contains(" at ")) + level = MessageLevel::Fatal; + if (line.contains("[DEBUG]")) + level = MessageLevel::Debug; + return level; +} + +MessageLevel::Enum MinecraftProcess::getLevel(const QString &levelName) +{ + if (levelName == "MultiMC") + return MessageLevel::MultiMC; + else if (levelName == "Debug") + return MessageLevel::Debug; + else if (levelName == "Info") + return MessageLevel::Info; + else if (levelName == "Message") + return MessageLevel::Message; + else if (levelName == "Warning") + return MessageLevel::Warning; + else if (levelName == "Error") + return MessageLevel::Error; + else if (levelName == "Fatal") + return MessageLevel::Fatal; + // Skip PrePost, it's not exposed to !![]! + else + return MessageLevel::Message; +} + +void MinecraftProcess::logOutput(const QStringList &lines, + MessageLevel::Enum defaultLevel, + bool guessLevel, bool censor) +{ + for (int i = 0; i < lines.size(); ++i) + logOutput(lines[i], defaultLevel, guessLevel, censor); +} + +void MinecraftProcess::logOutput(QString line, + MessageLevel::Enum defaultLevel, + bool guessLevel, bool censor) +{ + MessageLevel::Enum level = defaultLevel; + + // Level prefix + int endmark = line.indexOf("]!"); + if (line.startsWith("!![") && endmark != -1) + { + level = getLevel(line.left(endmark).mid(3)); + line = line.mid(endmark + 2); + } + // Guess level + else if (guessLevel) + level = this->guessLevel(line, defaultLevel); + + if (censor) + line = censorPrivateInfo(line); + + emit log(line, level); +} + void MinecraftProcess::on_stdErr() { QByteArray data = readAllStandardError(); QString str = m_err_leftover + QString::fromLocal8Bit(data); - m_err_leftover.clear(); + QStringList lines = str.split("\n"); - bool complete = str.endsWith("\n"); + m_err_leftover = lines.takeLast(); - for (int i = 0; i < lines.size() - 1; i++) - { - QString &line = lines[i]; - emit log(censorPrivateInfo(line), getLevel(line, MessageLevel::Error)); - } - if (!complete) - m_err_leftover = lines.last(); + logOutput(lines, MessageLevel::Error); } void MinecraftProcess::on_stdOut() { QByteArray data = readAllStandardOutput(); QString str = m_out_leftover + QString::fromLocal8Bit(data); - m_out_leftover.clear(); + QStringList lines = str.split("\n"); - bool complete = str.endsWith("\n"); + m_out_leftover = lines.takeLast(); - for (int i = 0; i < lines.size() - 1; i++) - { - QString &line = lines[i]; - emit log(censorPrivateInfo(line), getLevel(line, MessageLevel::Message)); - } - if (!complete) - m_out_leftover = lines.last(); + logOutput(lines); +} + +void MinecraftProcess::on_prepost_stdErr() +{ + QByteArray data = m_prepostlaunchprocess.readAllStandardError(); + QString str = m_err_leftover + QString::fromLocal8Bit(data); + + QStringList lines = str.split("\n"); + m_err_leftover = lines.takeLast(); + + logOutput(lines, MessageLevel::PrePost, false, false); +} + +void MinecraftProcess::on_prepost_stdOut() +{ + QByteArray data = m_prepostlaunchprocess.readAllStandardOutput(); + QString str = m_out_leftover + QString::fromLocal8Bit(data); + + QStringList lines = str.split("\n"); + m_out_leftover = lines.takeLast(); + + logOutput(lines, MessageLevel::PrePost, false, false); } // exit handler void MinecraftProcess::finish(int code, ExitStatus status) { + // Flush console window + if (!m_err_leftover.isEmpty()) + { + logOutput(m_err_leftover, MessageLevel::Error); + m_err_leftover.clear(); + } + if (!m_out_leftover.isEmpty()) + { + logOutput(m_out_leftover); + m_out_leftover.clear(); + } + if (!killed) { if (status == NormalExit) @@ -156,15 +257,32 @@ void MinecraftProcess::finish(int code, ExitStatus status) m_prepostlaunchprocess.processEnvironment().insert("INST_EXITCODE", QString(code)); // run post-exit - if (!m_instance->settings().get("PostExitCommand").toString().isEmpty()) + QString postlaunch_cmd = m_instance->settings().get("PostExitCommand").toString(); + if (!postlaunch_cmd.isEmpty()) { - m_prepostlaunchprocess.start(m_instance->settings().get("PostExitCommand").toString()); + emit log(tr("Running Post-Launch command: %1").arg(postlaunch_cmd)); + m_prepostlaunchprocess.start(postlaunch_cmd); m_prepostlaunchprocess.waitForFinished(); + // Flush console window + if (!m_err_leftover.isEmpty()) + { + logOutput(m_err_leftover, MessageLevel::PrePost); + m_err_leftover.clear(); + } + if (!m_out_leftover.isEmpty()) + { + logOutput(m_out_leftover, MessageLevel::PrePost); + m_out_leftover.clear(); + } if (m_prepostlaunchprocess.exitStatus() != NormalExit) { + emit log(tr("Post-Launch command failed with code %1.\n\n").arg(m_prepostlaunchprocess.exitCode()), + MessageLevel::Error); emit postlaunch_failed(m_instance, m_prepostlaunchprocess.exitCode(), m_prepostlaunchprocess.exitStatus()); } + else + emit log(tr("Post-Launch command ran successfully.\n\n")); } m_instance->cleanupAfterRun(); emit ended(m_instance, code, status); @@ -178,17 +296,40 @@ void MinecraftProcess::killMinecraft() void MinecraftProcess::launch() { - if (!m_instance->settings().get("PreLaunchCommand").toString().isEmpty()) + emit log("MultiMC version: " + MMC->version().toString() + "\n\n"); + emit log("Minecraft folder is:\n" + workingDirectory() + "\n\n"); + + QString prelaunch_cmd = m_instance->settings().get("PreLaunchCommand").toString(); + if (!prelaunch_cmd.isEmpty()) { - m_prepostlaunchprocess.start(m_instance->settings().get("PreLaunchCommand").toString()); + // Launch + emit log(tr("Running Pre-Launch command: %1").arg(prelaunch_cmd)); + m_prepostlaunchprocess.start(prelaunch_cmd); + // Wait m_prepostlaunchprocess.waitForFinished(); + // Flush console window + if (!m_err_leftover.isEmpty()) + { + logOutput(m_err_leftover, MessageLevel::PrePost); + m_err_leftover.clear(); + } + if (!m_out_leftover.isEmpty()) + { + logOutput(m_out_leftover, MessageLevel::PrePost); + m_out_leftover.clear(); + } + // Process return values if (m_prepostlaunchprocess.exitStatus() != NormalExit) { + emit log(tr("Pre-Launch command failed with code %1.\n\n").arg(m_prepostlaunchprocess.exitCode()), + MessageLevel::Fatal); m_instance->cleanupAfterRun(); emit prelaunch_failed(m_instance, m_prepostlaunchprocess.exitCode(), m_prepostlaunchprocess.exitStatus()); return; } + else + emit log(tr("Pre-Launch command ran successfully.\n\n")); } m_instance->setLastLaunch(); @@ -221,8 +362,6 @@ void MinecraftProcess::launch() } QString JavaPath = m_instance->settings().get("JavaPath").toString(); - emit log("MultiMC version: " + MMC->version().toString() + "\n\n"); - emit log("Minecraft folder is:\n" + workingDirectory() + "\n\n"); emit log("Java path is:\n" + JavaPath + "\n\n"); QString allArgs = args.join(", "); emit log("Java Arguments:\n[" + censorPrivateInfo(allArgs) + "]\n\n"); @@ -241,19 +380,3 @@ void MinecraftProcess::launch() QByteArray bytes = launchScript.toUtf8(); writeData(bytes.constData(), bytes.length()); } - -MessageLevel::Enum MinecraftProcess::getLevel(const QString &line, MessageLevel::Enum level) -{ - if (line.contains("[INFO]") || line.contains("[CONFIG]") || line.contains("[FINE]") || - line.contains("[FINER]") || line.contains("[FINEST]")) - level = MessageLevel::Message; - if (line.contains("[SEVERE]") || line.contains("[STDERR]")) - level = MessageLevel::Error; - if (line.contains("[WARNING]")) - level = MessageLevel::Warning; - if (line.contains("Exception in thread") || line.contains(" at ")) - level = MessageLevel::Fatal; - if (line.contains("[DEBUG]")) - level = MessageLevel::Debug; - return level; -} diff --git a/logic/MinecraftProcess.h b/logic/MinecraftProcess.h index 5d1a2b71..70e5df52 100644 --- a/logic/MinecraftProcess.h +++ b/logic/MinecraftProcess.h @@ -31,11 +31,12 @@ enum Enum { MultiMC, /**< MultiMC Messages */ Debug, /**< Debug Messages */ - Info, /**< Info Messages */ + Info, /**< Info Messages */ Message, /**< Standard Messages */ Warning, /**< Warnings */ Error, /**< Errors */ - Fatal /**< Fatal Errors */ + Fatal, /**< Fatal Errors */ + PrePost, /**< Pre/Post Launch command output */ }; } @@ -125,9 +126,17 @@ slots: void finish(int, QProcess::ExitStatus status); void on_stdErr(); void on_stdOut(); + void on_prepost_stdOut(); + void on_prepost_stdErr(); + void logOutput(const QStringList &lines, + MessageLevel::Enum defaultLevel = MessageLevel::Message, + bool guessLevel = true, bool censor = true); + void logOutput(QString line, + MessageLevel::Enum defaultLevel = MessageLevel::Message, + bool guessLevel = true, bool censor = true); private: QString censorPrivateInfo(QString in); - MessageLevel::Enum getLevel(const QString &message, MessageLevel::Enum defaultLevel); - + MessageLevel::Enum guessLevel(const QString &message, MessageLevel::Enum defaultLevel); + MessageLevel::Enum getLevel(const QString &levelName); }; -- cgit