From 8069c5f35d541e28d0105abbae22948b89396821 Mon Sep 17 00:00:00 2001 From: Mathew Sutcliffe Date: Mon, 8 Dec 2014 00:26:54 +0000 Subject: [PATCH] refs #350 Fixed log severity and log category setting in swiftcore console. --- src/swiftcore/tool.cpp | 53 ++++++++++++++++++------------------------ 1 file changed, 23 insertions(+), 30 deletions(-) diff --git a/src/swiftcore/tool.cpp b/src/swiftcore/tool.cpp index ff975e3a0..88591f5a1 100644 --- a/src/swiftcore/tool.cpp +++ b/src/swiftcore/tool.cpp @@ -44,10 +44,18 @@ namespace BlackMiscTest QThread::sleep(3); // let the DBus server startup // log - //! \todo make thread safe or ..? - CLogSubscriber messageSubscriber; - messageSubscriber.enableConsoleOutput(true); - messageSubscriber.changeSubscription(CLogPattern().withSeverityAtOrAbove(CStatusMessage::SeverityInfo)); + CLogSubscriber applicationMessageSubscriber, audioMessageSubscriber, networkMessageSubscriber, ownAircraftMessageSubscriber, settingsMessageSubscriber, simulatorMessageSubscriber; + CStatusMessage::StatusSeverity messageSeverity = CStatusMessage::SeverityInfo; + auto refreshSubscriptionSeverities = [ & ]() + { + applicationMessageSubscriber.changeSubscription(CLogPattern::allOf(runtime->getIContextApplication()).withSeverityAtOrAbove(messageSeverity)); + audioMessageSubscriber.changeSubscription(CLogPattern::allOf(runtime->getIContextAudio()).withSeverityAtOrAbove(messageSeverity)); + networkMessageSubscriber.changeSubscription(CLogPattern::allOf(runtime->getIContextNetwork()).withSeverityAtOrAbove(messageSeverity)); + ownAircraftMessageSubscriber.changeSubscription(CLogPattern::allOf(runtime->getIContextOwnAircraft()).withSeverityAtOrAbove(messageSeverity)); + settingsMessageSubscriber.changeSubscription(CLogPattern::allOf(runtime->getIContextSettings()).withSeverityAtOrAbove(messageSeverity)); + simulatorMessageSubscriber.changeSubscription(CLogPattern::allOf(runtime->getIContextSimulator()).withSeverityAtOrAbove(messageSeverity)); + }; + refreshSubscriptionSeverities(); QTextStream qtout(stdout); qtout << "Running on server here " << Tool::getPid() << " thread: " << QThread::currentThreadId() << endl; @@ -103,40 +111,25 @@ namespace BlackMiscTest else if (line.startsWith("level")) { line = line.replace("level", "").trimmed(); - CStatusMessage::StatusSeverity severity = CStatusMessage::stringToSeverity(line); - messageSubscriber.changeSubscription(CLogPattern().withSeverityAtOrAbove(severity)); - qtout << "Changed level to " << CStatusMessage::severityToString(severity) << endl; + messageSeverity = CStatusMessage::stringToSeverity(line); + refreshSubscriptionSeverities(); + qtout << "Changed level to " << CStatusMessage::severityToString(messageSeverity) << endl; } else if (line.startsWith("log")) { line.replace("log", ""); bool enable = line.endsWith("e"); - if (line.startsWith("all")) - { - QMetaObject::invokeMethod(CLogHandler::instance(), "enableConsoleOutput", Q_ARG(bool, enable)); - } - else - { - CLogCategoryList categories; - if (line.startsWith("app")) { categories = runtime->getIContextApplication(); } - else if (line.startsWith("aud")) { categories = runtime->getIContextAudio(); } - else if (line.startsWith("net")) { categories = runtime->getIContextNetwork(); } - else if (line.startsWith("own")) { categories = runtime->getIContextOwnAircraft(); } - else if (line.startsWith("set")) { categories = runtime->getIContextSettings(); } - else if (line.startsWith("sim")) { categories = runtime->getIContextSimulator(); } - if (! categories.isEmpty()) - { - BlackMisc::singleShot(0, BlackMisc::CLogHandler::instance()->thread(), [ = ]() - { - BlackMisc::CLogHandler::instance()->handlerForPattern(CLogPattern::allOf(categories))->enableConsoleOutput(enable); - }); - } - } + if (line.startsWith("app") || line.startsWith("all")) { applicationMessageSubscriber.enableConsoleOutput(enable); } + if (line.startsWith("aud") || line.startsWith("all")) { audioMessageSubscriber.enableConsoleOutput(enable); } + if (line.startsWith("net") || line.startsWith("all")) { networkMessageSubscriber.enableConsoleOutput(enable); } + if (line.startsWith("own") || line.startsWith("all")) { ownAircraftMessageSubscriber.enableConsoleOutput(enable); } + if (line.startsWith("set") || line.startsWith("all")) { settingsMessageSubscriber.enableConsoleOutput(enable); } + if (line.startsWith("sim") || line.startsWith("all")) { simulatorMessageSubscriber.enableConsoleOutput(enable); } } else if (line.startsWith("h")) { - qtout << "1) global logging:" << endl; - qtout << " levels: d, i, w, e example: level d for debug level" << endl; + qtout << "1) logging severity levels:" << endl; + qtout << " d, i, w, e example: level d for debug level" << endl; qtout << "2) logging for contexts:" << endl; qtout << " log + context + [e]nabled / [d]isabled" << endl; qtout << " contexts: app / aud / net / own (aircraft) / set / sim / all" << endl;