diff --git a/launcher/launch/LaunchTask.cpp b/launcher/launch/LaunchTask.cpp index 68e706c11..3f628ccb3 100644 --- a/launcher/launch/LaunchTask.cpp +++ b/launcher/launch/LaunchTask.cpp @@ -257,10 +257,7 @@ bool LaunchTask::parseXmlLogs(QString const& line, MessageLevel level) MessageLevel newLevel = messageLevelFromLine(msg); if (newLevel == MessageLevel::Unknown) - newLevel = LogParser::guessLevel(line); - - if (newLevel == MessageLevel::Unknown) - newLevel = model->previousLevel(); + newLevel = LogParser::guessLevel(line, model->previousLevel()); msg = censorPrivateInfo(msg); diff --git a/launcher/logs/LogParser.cpp b/launcher/logs/LogParser.cpp index b33f9546f..cc7cd8b79 100644 --- a/launcher/logs/LogParser.cpp +++ b/launcher/logs/LogParser.cpp @@ -320,7 +320,7 @@ std::optional LogParser::parseLog4J() throw std::runtime_error("unreachable: already verified this was a complete log4j:Event"); } -MessageLevel LogParser::guessLevel(const QString& line) +MessageLevel LogParser::guessLevel(const QString& line, MessageLevel previous) { static const QRegularExpression LINE_WITH_LEVEL("^\\[(?[0-9:]+)\\] \\[[^/]+/(?[^\\]]+)\\]"); auto match = LINE_WITH_LEVEL.match(line); @@ -343,11 +343,17 @@ MessageLevel LogParser::guessLevel(const QString& line) return MessageLevel::Debug; } + if (line.contains("Exception: ") || line.contains("Throwable: ")) + return MessageLevel::Error; + + if (line.startsWith("Caused by: ") || line.startsWith("Exception in thread")) + return MessageLevel::Error; + if (line.contains("overwriting existing")) return MessageLevel::Fatal; - if (line == "---- Minecraft Crash Report ----") - return MessageLevel::Error; + if (line.startsWith("\t") || line.startsWith(" ")) + return previous; return MessageLevel::Unknown; } diff --git a/launcher/logs/LogParser.h b/launcher/logs/LogParser.h index 9741a9809..ae657297c 100644 --- a/launcher/logs/LogParser.h +++ b/launcher/logs/LogParser.h @@ -59,7 +59,7 @@ class LogParser { std::optional getError(); /// guess log level from a line of game log - static MessageLevel guessLevel(const QString& line); + static MessageLevel guessLevel(const QString& line, MessageLevel previous); protected: std::optional parseAttributes(); diff --git a/launcher/ui/pages/instance/OtherLogsPage.cpp b/launcher/ui/pages/instance/OtherLogsPage.cpp index c8d0c3346..ecdee653a 100644 --- a/launcher/ui/pages/instance/OtherLogsPage.cpp +++ b/launcher/ui/pages/instance/OtherLogsPage.cpp @@ -287,10 +287,7 @@ void OtherLogsPage::reload() if (!m_instance) { level = messageLevelFromLauncherLine(lineTemp); } else { - level = LogParser::guessLevel(line); - - if (level == MessageLevel::Unknown) - level = last; + level = LogParser::guessLevel(line, last); } last = level; diff --git a/tests/XmlLogs_test.cpp b/tests/XmlLogs_test.cpp index 75a2dd90c..853c99341 100644 --- a/tests/XmlLogs_test.cpp +++ b/tests/XmlLogs_test.cpp @@ -126,10 +126,7 @@ class XmlLogParseTest : public QObject { last = entry.level; } else if (std::holds_alternative(item)) { auto msg = std::get(item).message; - auto level = LogParser::guessLevel(msg); - - if (level == MessageLevel::Unknown) - level = last; + auto level = LogParser::guessLevel(msg, last); out.append(std::make_pair(level, msg)); last = level; diff --git a/tests/testdata/TestLogs/TerraFirmaGreg-Modern-levels.txt b/tests/testdata/TestLogs/TerraFirmaGreg-Modern-levels.txt index 1d0c18f9d..65e1c569e 100644 --- a/tests/testdata/TestLogs/TerraFirmaGreg-Modern-levels.txt +++ b/tests/testdata/TestLogs/TerraFirmaGreg-Modern-levels.txt @@ -46,166 +46,166 @@ WARN WARN INFO INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO INFO INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO +INFO WARN WARN INFO @@ -299,7 +299,7 @@ INFO INFO INFO INFO -INFO +UNKNOWN INFO INFO INFO @@ -406,8 +406,8 @@ INFO WARN WARN INFO -INFO -INFO +UNKNOWN +UNKNOWN INFO INFO INFO @@ -591,7 +591,7 @@ INFO INFO INFO INFO -INFO +UNKNOWN INFO INFO INFO @@ -626,20 +626,20 @@ INFO INFO INFO WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR INFO ERROR ERROR @@ -723,54 +723,54 @@ WARN INFO INFO WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR INFO INFO INFO WARN +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN -WARN +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR +ERROR INFO INFO INFO @@ -820,27 +820,27 @@ WARN WARN WARN WARN -WARN -INFO +UNKNOWN INFO +UNKNOWN INFO ERROR INFO INFO INFO INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO -INFO +UNKNOWN +UNKNOWN +UNKNOWN +UNKNOWN +UNKNOWN +UNKNOWN +UNKNOWN +UNKNOWN +UNKNOWN +UNKNOWN +UNKNOWN +UNKNOWN INFO INFO INFO @@ -859,7 +859,7 @@ INFO INFO WARN INFO -INFO +UNKNOWN INFO INFO INFO diff --git a/tests/testdata/TestLogs/TerraFirmaGreg-Modern-xml-levels.txt b/tests/testdata/TestLogs/TerraFirmaGreg-Modern-xml-levels.txt index 42f1e3882..08d5100a0 100644 --- a/tests/testdata/TestLogs/TerraFirmaGreg-Modern-xml-levels.txt +++ b/tests/testdata/TestLogs/TerraFirmaGreg-Modern-xml-levels.txt @@ -427,8 +427,8 @@ INFO INFO INFO INFO -INFO -INFO +UNKNOWN +UNKNOWN INFO INFO INFO @@ -606,7 +606,7 @@ INFO INFO INFO INFO -INFO +UNKNOWN INFO INFO INFO @@ -750,9 +750,9 @@ WARN WARN WARN WARN -WARN -INFO +UNKNOWN INFO +UNKNOWN INFO ERROR INFO @@ -777,7 +777,7 @@ INFO INFO WARN INFO -INFO +UNKNOWN INFO INFO INFO