Allow configuring warning/info/debug logging levels
This commit is contained in:
parent
45081ad64e
commit
48dd263cd9
@ -145,23 +145,23 @@ function loadLoggingCategorySettings() {
|
|||||||
|
|
||||||
for (var loggingCategory in responseMap['loggingCategories']) {
|
for (var loggingCategory in responseMap['loggingCategories']) {
|
||||||
var loggingCategoryElement = document.getElementById("debug-category-" + loggingCategory)
|
var loggingCategoryElement = document.getElementById("debug-category-" + loggingCategory)
|
||||||
loggingCategoryElement.checked = responseMap['loggingCategories'][loggingCategory]
|
console.log("Setting category", loggingCategory, "to", responseMap['loggingCategories'][loggingCategory])
|
||||||
|
loggingCategoryElement.value = responseMap['loggingCategories'][loggingCategory]
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var loggingCategory in responseMap['loggingCategoriesPlugins']) {
|
for (var loggingCategory in responseMap['loggingCategoriesPlugins']) {
|
||||||
var loggingCategoryElement = document.getElementById("debug-category-" + loggingCategory)
|
var loggingCategoryElement = document.getElementById("debug-category-" + loggingCategory)
|
||||||
loggingCategoryElement.checked = responseMap['loggingCategoriesPlugins'][loggingCategory]
|
loggingCategoryElement.value = responseMap['loggingCategoriesPlugins'][loggingCategory]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function toggleLoggingCategory(categoryName) {
|
function toggleLoggingCategory(categoryName, obj) {
|
||||||
var switchElement = document.getElementById("debug-category-" + categoryName)
|
console.log("Select changed:", categoryName, obj.value)
|
||||||
console.log("Toggle logging category", categoryName, switchElement.checked)
|
|
||||||
|
|
||||||
var fileRequestUrl = "/debug/logging-categories?" + categoryName + "=" + (switchElement.checked ? "true" : "false");
|
var fileRequestUrl = "/debug/logging-categories?" + categoryName + "=" + obj.value;
|
||||||
|
|
||||||
// Request report file generation
|
// Request report file generation
|
||||||
var request = new XMLHttpRequest();
|
var request = new XMLHttpRequest();
|
||||||
|
|||||||
@ -283,6 +283,52 @@ button::-moz-focus-inner { border: 0; }
|
|||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.debug-select {
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin: 0;
|
||||||
|
border-radius: 4px;
|
||||||
|
font: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.debug-select {
|
||||||
|
max-width: 100%;
|
||||||
|
width: 100%;
|
||||||
|
border: 0 none;
|
||||||
|
padding: 0 10px;
|
||||||
|
background: #fff;
|
||||||
|
color: #666;
|
||||||
|
border: 1px solid #e5e5e5;
|
||||||
|
transition: .2s ease-in-out;
|
||||||
|
transition-property: color,background-color,border;
|
||||||
|
}
|
||||||
|
|
||||||
|
.debug-select:not([multiple]):not([size]) {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
-moz-appearance: none;
|
||||||
|
padding-right: 20px;
|
||||||
|
background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A");
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: 100% 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.debug-select:not([multiple]):not([size]) {
|
||||||
|
height: 40px;
|
||||||
|
vertical-align: middle;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.debug-select:not([multiple]):not([size]) option {
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
|
||||||
|
.debug-select:focus {
|
||||||
|
outline:0;
|
||||||
|
background-color: #fff;
|
||||||
|
color: #666;
|
||||||
|
border-color: #57baae;
|
||||||
|
}
|
||||||
|
|
||||||
/* The switch - the box around the slider */
|
/* The switch - the box around the slider */
|
||||||
.switch {
|
.switch {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|||||||
@ -410,12 +410,32 @@ HttpReply *DebugServerHandler::processDebugRequest(const QString &requestPath, c
|
|||||||
QVariantMap dataMap;
|
QVariantMap dataMap;
|
||||||
QVariantMap loggingCategories;
|
QVariantMap loggingCategories;
|
||||||
foreach (const QString &loggingCategory, NymeaCore::loggingFilters()) {
|
foreach (const QString &loggingCategory, NymeaCore::loggingFilters()) {
|
||||||
loggingCategories.insert(loggingCategory, settings.value(QString("%1.debug").arg(loggingCategory), false).toBool());
|
QString level = "critical";
|
||||||
|
if (settings.value(QString("%1.warning").arg(loggingCategory), true).toBool()) {
|
||||||
|
level = "warning";
|
||||||
|
}
|
||||||
|
if (settings.value(QString("%1.info").arg(loggingCategory), true).toBool()) {
|
||||||
|
level = "info";
|
||||||
|
}
|
||||||
|
if (settings.value(QString("%1.debug").arg(loggingCategory), false).toBool()) {
|
||||||
|
level = "debug";
|
||||||
|
}
|
||||||
|
loggingCategories.insert(loggingCategory, level);
|
||||||
}
|
}
|
||||||
dataMap.insert("loggingCategories", loggingCategories);
|
dataMap.insert("loggingCategories", loggingCategories);
|
||||||
QVariantMap loggingCategoriesPlugins;
|
QVariantMap loggingCategoriesPlugins;
|
||||||
foreach (const QString &loggingCategory, NymeaCore::loggingFiltersPlugins()) {
|
foreach (const QString &loggingCategory, NymeaCore::loggingFiltersPlugins()) {
|
||||||
loggingCategoriesPlugins.insert(loggingCategory, settings.value(QString("%1.debug").arg(loggingCategory), false).toBool());
|
QString level = "critical";
|
||||||
|
if (settings.value(QString("%1.warning").arg(loggingCategory), true).toBool()) {
|
||||||
|
level = "warning";
|
||||||
|
}
|
||||||
|
if (settings.value(QString("%1.info").arg(loggingCategory), true).toBool()) {
|
||||||
|
level = "info";
|
||||||
|
}
|
||||||
|
if (settings.value(QString("%1.debug").arg(loggingCategory), false).toBool()) {
|
||||||
|
level = "debug";
|
||||||
|
}
|
||||||
|
loggingCategoriesPlugins.insert(loggingCategory, level);
|
||||||
}
|
}
|
||||||
dataMap.insert("loggingCategoriesPlugins", loggingCategoriesPlugins);
|
dataMap.insert("loggingCategoriesPlugins", loggingCategoriesPlugins);
|
||||||
|
|
||||||
@ -434,9 +454,25 @@ HttpReply *DebugServerHandler::processDebugRequest(const QString &requestPath, c
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool enabled = QVariant(requestQuery.queryItems().at(i).second).toBool();
|
QString level = QVariant(requestQuery.queryItems().at(i).second).toString();
|
||||||
qCDebug(dcDebugServer()) << "Logging category" << category << (enabled ? "enabled" : "disabled");
|
qCDebug(dcDebugServer()) << "Logging category" << category << level;
|
||||||
settings.setValue(QString("%1.debug").arg(category), (enabled ? "true" : "false"));
|
if (level == "debug") {
|
||||||
|
settings.setValue(QString("%1.debug").arg(category), true);
|
||||||
|
settings.setValue(QString("%1.info").arg(category), true);
|
||||||
|
settings.setValue(QString("%1.warning").arg(category), true);
|
||||||
|
} else if (level == "info") {
|
||||||
|
settings.setValue(QString("%1.debug").arg(category), false);
|
||||||
|
settings.setValue(QString("%1.info").arg(category), true);
|
||||||
|
settings.setValue(QString("%1.warning").arg(category), true);
|
||||||
|
} else if (level == "warning"){
|
||||||
|
settings.setValue(QString("%1.debug").arg(category), false);
|
||||||
|
settings.setValue(QString("%1.info").arg(category), false);
|
||||||
|
settings.setValue(QString("%1.warning").arg(category), true);
|
||||||
|
} else {
|
||||||
|
settings.setValue(QString("%1.debug").arg(category), false);
|
||||||
|
settings.setValue(QString("%1.info").arg(category), false);
|
||||||
|
settings.setValue(QString("%1.warning").arg(category), false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update logging filter rules according to the nw settings
|
// Update logging filter rules according to the nw settings
|
||||||
@ -1806,22 +1842,29 @@ QByteArray DebugServerHandler::createDebugXmlDocument()
|
|||||||
QStringList loggingCategories = NymeaCore::loggingFilters();
|
QStringList loggingCategories = NymeaCore::loggingFilters();
|
||||||
loggingCategories.sort();
|
loggingCategories.sort();
|
||||||
|
|
||||||
|
QHash<QString, QString> categoryMap = {
|
||||||
|
{"debug", "🐞 Debug"},
|
||||||
|
{"info", "ℹ️ Info"},
|
||||||
|
{"warning", "⚠️ Warning"},
|
||||||
|
{"critical", "🔥 Critical"}
|
||||||
|
};
|
||||||
foreach (const QString &loggingCategory, loggingCategories) {
|
foreach (const QString &loggingCategory, loggingCategories) {
|
||||||
writer.writeStartElement("div");
|
writer.writeStartElement("div");
|
||||||
writer.writeAttribute("class", "debug-category");
|
writer.writeAttribute("class", "debug-category");
|
||||||
writer.writeTextElement("p", loggingCategory);
|
writer.writeTextElement("p", loggingCategory);
|
||||||
writer.writeStartElement("label");
|
writer.writeStartElement("label");
|
||||||
writer.writeAttribute("class", "switch");
|
writer.writeStartElement("select");
|
||||||
writer.writeStartElement("input");
|
writer.writeAttribute("class", "debug-select");
|
||||||
writer.writeAttribute("id", QString("debug-category-%1").arg(loggingCategory));
|
writer.writeAttribute("onchange", QString("toggleLoggingCategory('%1', this)").arg(loggingCategory));
|
||||||
writer.writeAttribute("type", "checkbox");
|
writer.writeAttribute("id", QString("debug-category-%1").arg(loggingCategory));
|
||||||
writer.writeAttribute("onclick", QString("toggleLoggingCategory('%1')").arg(loggingCategory));
|
foreach (const QString &option, QStringList({"debug", "info", "warning", "critical"})) {
|
||||||
writer.writeEndElement(); // input
|
writer.writeStartElement("option");
|
||||||
writer.writeStartElement("span");
|
writer.writeAttribute("value", option);
|
||||||
writer.writeAttribute("class", "slider round");
|
writer.writeCharacters(categoryMap.value(option));
|
||||||
writer.writeCharacters("");
|
writer.writeEndElement();
|
||||||
writer.writeEndElement(); // span
|
}
|
||||||
writer.writeEndElement(); // label
|
writer.writeEndElement(); // select
|
||||||
|
writer.writeEndElement(); // label
|
||||||
writer.writeEndElement(); // div debug-category
|
writer.writeEndElement(); // div debug-category
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1842,16 +1885,17 @@ QByteArray DebugServerHandler::createDebugXmlDocument()
|
|||||||
writer.writeAttribute("class", "debug-category");
|
writer.writeAttribute("class", "debug-category");
|
||||||
writer.writeTextElement("p", loggingCategory);
|
writer.writeTextElement("p", loggingCategory);
|
||||||
writer.writeStartElement("label");
|
writer.writeStartElement("label");
|
||||||
writer.writeAttribute("class", "switch");
|
writer.writeStartElement("select");
|
||||||
writer.writeStartElement("input");
|
writer.writeAttribute("class", "debug-select");
|
||||||
writer.writeAttribute("id", QString("debug-category-%1").arg(loggingCategory));
|
writer.writeAttribute("onchange", QString("toggleLoggingCategory('%1', this)").arg(loggingCategory));
|
||||||
writer.writeAttribute("type", "checkbox");
|
writer.writeAttribute("id", QString("debug-category-%1").arg(loggingCategory));
|
||||||
writer.writeAttribute("onclick", QString("toggleLoggingCategory('%1')").arg(loggingCategory));
|
foreach (const QString &option, QStringList({"debug", "info", "warning", "critical"})) {
|
||||||
writer.writeEndElement(); // input
|
writer.writeStartElement("option");
|
||||||
writer.writeStartElement("span");
|
writer.writeAttribute("value", option);
|
||||||
writer.writeAttribute("class", "slider round");
|
writer.writeCharacters(categoryMap.value(option));
|
||||||
writer.writeCharacters("");
|
writer.writeEndElement();
|
||||||
writer.writeEndElement(); // span
|
}
|
||||||
|
writer.writeEndElement(); // select
|
||||||
writer.writeEndElement(); // label
|
writer.writeEndElement(); // label
|
||||||
writer.writeEndElement(); // div debug-category
|
writer.writeEndElement(); // div debug-category
|
||||||
}
|
}
|
||||||
@ -1867,7 +1911,7 @@ QByteArray DebugServerHandler::createDebugXmlDocument()
|
|||||||
writer.writeAttribute("class", "footer");
|
writer.writeAttribute("class", "footer");
|
||||||
writer.writeTextElement("p", QString("Copyright %1 %2 nymea GmbH.").arg(QChar(0xA9)).arg(COPYRIGHT_YEAR_STRING));
|
writer.writeTextElement("p", QString("Copyright %1 %2 nymea GmbH.").arg(QChar(0xA9)).arg(COPYRIGHT_YEAR_STRING));
|
||||||
//: The footer license note of the debug interface
|
//: The footer license note of the debug interface
|
||||||
writer.writeTextElement("p", tr("Released under the GNU GENERAL PUBLIC LICENSE Version 2."));
|
writer.writeTextElement("p", tr("Released under the GNU GENERAL PUBLIC LICENSE Version 3."));
|
||||||
writer.writeEndElement(); // div footer
|
writer.writeEndElement(); // div footer
|
||||||
|
|
||||||
writer.writeEndElement(); // div container
|
writer.writeEndElement(); // div container
|
||||||
|
|||||||
Reference in New Issue
Block a user