NEWS
[Frage] log severity level debug
-
Hallo,
bei mir gibt es keine Ausgabe bei severity level 'debug' (auch wenn der Filter auf "debug" steht - im Log erscheint auch nix).
Feature oder verstehe ich was nicht?
Gruß
Georg
-
Dazu benötigst Du auch Meldungen im Level Debug
Du kannst unter Instanzen für jeden Adapter (Expertenmodus) einstellen ab welchem Level der Adapter Meldungen erzeugt. Standard ist ab Info. D.h. es tauchen nie Debug-Meldungen auf, wenn Du das beim gewünschten Adapter nicht eingestellt hast.
Dann ist es noch Abhängig davon, was der Entwickler des Adapters meint als debug ausgeben zu müssen.
-
ah, ok - danke
-
mh, nicht schön. Der javascript Adapter müllt einen ja dann zu. da kann man den debug level in seinen eigenen scripten vergessen.
-
Darf ich raten? Du nimmst Redis … ja da ist bei debug (zu) viel los ...:-(
-
mh, nicht schön. Der javascript Adapter müllt einen ja dann zu. da kann man den debug level in seinen eigenen scripten vergessen. `
Was willst Du denn erreichen?
Debug-Logs innerhalb Deiner Skripte?
Für neue Skripts nutze ich es zwar nicht mehr. Ich habe mir aber mal eine globale Funktion logs() geschrieben, die es erlaubt innerhalb eines Skripts Skriptabhängige Logs auszugeben. Den Loglevel des jeweiligen Skript legt man am Anfang des Skripts mit der Zeile:````
var loglevel = "info";Im Skript selbst kann man dann folgende Loglevels definieren, die im ioBroker-Log auch farbig ausgegeben werden:
var loglevels = {
"debug2": {"level": -2, "leveltext":"debug2: ", "color": "blue"},
"debug1": {"level": -1, "leveltext":"debug1: ", "color": "mediumblue"},
"debug": {"level": 0, "leveltext":"debug0: ", "color": "darkblue"},
"debug0": {"level": 0, "leveltext":"debug0: ", "color": "mediumblue"},
"info": {"level": 10, "leveltext":"", "color": "none"},
"warn": {"level": 20, "leveltext":"warn: ", "color": "darkorange"},
"error": {"level": 30, "leveltext":"error:", "color": "darkred"}
};Innerhalb Deiner Skripte kannst Du dann logs() wie log() nutzen, nur mit den skriptindividuellen Log-Leveln, z.B.:
logs("Eine Debug Log im Skript","debug");
logs("Ein tieferer Debuglevel","debug2");
logs("Eine Info im Skript","info");
logs("Eine Warnung","warn");Durch Anpassung der ersten Zeile im Skript kannst Du den skritpindividuellen Loglevel anpassen:
var loglevel = "warn";
(Alle Skript Logins ab Stufe Warnung ausgeben). Folgendes Skript unter ****global**** einfügen und dann kann in jedem Skript die Funktion ****logs()**** (für Skript individuelle Log Ausgaben) genutzt werden: >! ```` // globale Funktion: logs(logtext,level,color) // Version: 0.1.1 >! // Beschreibung: Ermöglicht innerhalb eines Javascript-Scripts unterschiedliche Loglevel // Benutzung, wie log() mit der zusätzlichen Option die Ausgabefarbe zu überschreiben >! // Übergabeparameter: logtext der Text, der als Log ausgegeben werden soll // level [optional] der Loglevel der Meldung als String // der level (mögliche Werte definiert in JSON loglevels), in dem der Text ausgegeben werden soll // color [optional] die html-Farbe der Meldung als String, siehe z.B.: http://tomheller.de/theholycymbal/html-farben.html // "none" -> es wird die Standardfarbe von log() im Level Info ausgegebn. // nichts angegeben -> es werden die Farben ais dem JSON loglevels je nach level ausgegeben // html-Farbe übergeben -> es wird die übergebenen Farbe ausgegeben >! // Rückgabe: Gibt den aktuellen Loglevel für diesen Aufruf zurück. // Gültiger level beim Aufruf -> der im Script definierte Loglevel wird zurückgegeben // kein Level angegeben -> es wird der Level "info" verwendet und zurückgegeben // ungültiger Level -> es wird der Level "info" verwendet und zurückgegeben >! // Infos: Benötigt im Javascript, welches die Funktion logs() verwendet // die Variabele loglevel, z.B. var loglevel = "info"; // // 0.1.1 Default Loglevel ergänzt >! // ----------------------------------------------------------------------------- >! // globale Scripte werden vor dem eigentlichen Script als Text reinkopiert // daher kann im globalen Script eine Variable einen Defaultwert enthalten >! var loglevel = 'info'; // Default Loglevel, wenn der Loglevel im aufrufenden Script nicht definiert ist >! // ----------------------------------------------------------------------------- // Script Log - logs() - ANFANG // ----------------------------------------------------------------------------- var loglevels = { "debug2": {"level": -2, "leveltext":"debug2: ", "color": "blue"}, "debug1": {"level": -1, "leveltext":"debug1: ", "color": "mediumblue"}, "debug": {"level": 0, "leveltext":"debug0: ", "color": "darkblue"}, "debug0": {"level": 0, "leveltext":"debug0: ", "color": "mediumblue"}, "info": {"level": 10, "leveltext":"", "color": "none"}, "warn": {"level": 20, "leveltext":"warn: ", "color": "darkorange"}, "error": {"level": 30, "leveltext":"error:", "color": "darkred"} }; >! function logs(logtext,level,color) { >! // in der Funktion den gesetzten Level überprüfen if (typeof level == 'undefined') {level = 'info'} if (level in loglevels) {} else { log("ungültiger loglevel **" + level + "** in Funktion logs() im Script","warn"); log("loglevel für das Script auf Stufe: " + loglevel + " gesetzt.","warn"); level = 'info'; loglevel = level; } >! // den im Script konfigurierten Loglevel prüfen // zum Scriptstart muss die Variable loglevel deklariert werden // z.B.: // var loglevel = "warn"; if (typeof loglevel == 'undefined') {loglevel = 'info'} if (loglevel in loglevels) {} else { var loglevelError = loglevel; loglevel = 'info'; // Loglevel auf Info stellen, wenn kein gültiger Loglevel im Script deklariert ist log("ungültiger loglevel für logs() in der Konfiguration im Script","error"); log("variable loglevel am Anfang des Scripts einem gültigen Wert zuweisen","error"); log('im Script konfigurierter loglevel: ' + loglevelError + ' -> geändert in: ' + loglevel) + '',"warn"; } >! // Farbe ernitteln if (typeof color == 'undefined') {color = loglevels[level].color} >! // Log je nach eingestelltem Loglevel ausgeben var levelConf = loglevels[loglevel].level; var levelLogs = loglevels[level].level; if (levelLogs >= levelConf) { if (color == "none") { log(loglevels[level].leveltext + logtext); } else { log('' + loglevels[level].leveltext + logtext + ''); } } >! return loglevel; } // ----------------------------------------------------------------------------- // Script Log - logs() - ENDE // ----------------------------------------------------------------------------- >! ````
-
den log level zu setzen und dann zu schauen, was der Code macht, ist ja der übliche Weg. Man hat dann aber im Fehlerfall nicht die Infos, die man braucht und man muss dann immer zeitintensiv versuchen das Problem zu analysieren.
Ich habe deshalb seit Ewigkeiten log systeme anders umgesetzt. Alle log Ausgaben landen in der Datei/Datenbank und gefiltert wird bei der Durchsicht. Das hat zwar den Nachteil, dass die Logs ein vielfaches grösser werden, was auch schon mal zu Problemen führte, als die Speicherkapazitäten noch nicht so gross waren, aber heute kein Problem mehr darstellt.
Allerdings bei der Menge die das javascript adapter rauswirft, ist der Speicher des Raspi wahrscheinlich in kürzester Zeit voll.
Deine Idee einen eigenen sehen severity level im Text zu setzen finde ich dennoch gut.
Danke, die Idee übernehm ich
-
die im ioBroker-Log auch farbig ausgegeben werden `
Omg, das geht?! Muss ich doch direkt mal nutzen. -
hallo @ruhr70
der thread ist ja schon alt aber ich würde gerne dein script verwenden - funktioniert das noch in den neuen jsadapter?
habe versucht es zu installieren - bringe es aber irgendwie nicht zum laufen. dqs globale script wird ausgeführt, aber es kommt keine farbe. folgendes habe ich gemacht
im glob. script : var loglevel = 'debug1';
meinscript: logs("das ist ein test"); -> keine farbe im log- nur text in "grau"
meinscript: logs("das ist ein test","debug1","aqua"); -> keine farbe im log- nur text in "grau"wäre dir dankbar für kurzen input
-
Vielleicht etwas alt, bin aber auch darauf gestoßen, da es sexy wirkte:
@liv-in-sky Soweit ich das sehen kann, wird die Variable color im entscheidenden Teil des Scripts von @ruhr70 - bei der letztlichen Ausgabe - gar nicht genutzt. Somit wundere ich mich nicht, dass es keinen Effekt hat. -
oh - das ist lange her - ich habe das nicht länger verfolgt, da ich damals nicht genug ahnung hatte und keiner es für gut befand, farbige logs zu haben - was mein hauptanliegen war
ich müßte mich da erst wieder reindenken, weil ich nicht mal wer weiß, ob ich das script noch habe
falls du da was machst, bitte halte mich auf den laufenden
ich glaube das müßte es sein -es ist eine tabelle mit farben - aber wie gesagt - ist lange her
und da fällt mir ein - das problem ist , dass ich bei jeden blockly mit einem eingebund. script arbeiten mußte - war zu nervig - wäre super, sowas im blockly-block zu haben - aber das kann ich nicht umsetzen