Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [Vorlage] JS: Log-Datei aufbereiten für VIS

    NEWS

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    • Save The Date: ioBroker@Smart Living Forum Solingen, 14.06.

    [Vorlage] JS: Log-Datei aufbereiten für VIS

    This topic has been deleted. Only users with topic management privileges can see it.
    • Mic
      Mic Developer last edited by Mic

      Sinn und Zweck dieses Scripts

      Der ioBroker loggt alle Aktionen der Adapter und Scripte entsprechend mit, einzusehen in der ioBroker-Administration, linke Seite Menüpunkt "Log".
      Dieses Script bietet nun folgendes:

      • Log im VIS darstellen: Entsprechend gefiltert, also etwa nur Warnungen und Fehler, nur Ausgaben eines bestimmten Adapters, usw.
      • Auf bestimmte Log-Ereignisse reagieren

      Dabei nimmt das Script jeden neuen Logeintrag des ioBrokers und wendet entsprechend gesetzte Filter an, um den Eintrag dann in den entsprechenden Datenpunkten dieses Scripts abzulegen.
      Es stehen auch JSON-Datenpunkte zur Verfügung, mit diesen kann im vis eine Tabelle ausgegeben werden. Z.B. über das Widget 'basic - Table' oder hier im Beispiel über Widget 'materialdesign - Table' (Material Design Widgets werden dafür benötigt).
      logproj.png

      Über die Filter kann man auch einzelne Geräte-Logs oder JS/Blockly-Logs ausgeben. Beispiel für ein "Garagentor":
      garage.png

      Installation / Einrichtung

      Hier weiterlesen (Github)...



      Ursprünglicher Beitrag von mir vom 18.07.2018:

      Hallo,

      ich überlege, dass ich per JavaScript die Log-Datei unter "/opt/iobroker/log/iobroker.YYYY-MM-DD.log" z.B. alle paar Sekunden auslese und Warnungen und Fehler in zwei separate Datenpunkte schreibe (Datenpunkt hält dann z.B. die letzten 30 Werte vor). Diese würde ich dann übers vis entsprechend in einer View ausgeben.

      Bevor ich das Rad neu erfinde, gibt es schon ein solches Script? Habe nur das hier gefunden: https://forum.iobroker.net/topic/1246/geloest-log-daten-im-vis-anzeigen

      Falls das noch keiner erstellt hat (was mich etwas wundern würde, wäre ja praktisch 🙂 - auch weil manche Adapter das Log voll müllen, da könnte man dann noch ausfiltern etc.) dann werde ich da selbst was schreiben und hier zur Verfügung stellen.

      Viele Grüße

      Negalein sigi234 2 Replies Last reply Reply Quote 7
      • Q
        quorle last edited by

        Puhh, dass wäre wirklich Nixe mit Filter. Somit könnte man die ganzen erstellten Debugmeldungen in einem Fenster anzeigen lassen.

        Ist zwar zu hoch für mich, aber ich wäre happy über so etwas.

        Gesendet von iPhone mit Tapatalk

        1 Reply Last reply Reply Quote 0
        • apollon77
          apollon77 last edited by

          Schaut mal im GitHub beim systeminfo Adapter. Da gibts glaube ich ein issue dazu. Hängt euch da doch mal dran.

          Gesendet vom Handy …

          1 Reply Last reply Reply Quote 0
          • Mic
            Mic Developer last edited by

            Danke für Eure Antworten. Ich habe jetzt selbst ein Script geschrieben, es liest regelmäßig (einstellbar, z.B. alle 2 Minuten) die tägliche Log-Datei des ioBrokers aus und setzt das Ergebnis in Datenpunkte, aufgeteilt nach Log-Level (error, info, warn, etc.). Neue Log-Einträge werden in den Datenpunkten ergänzt. Es stehen JSON-Datenpunkte zur Verfügung, mit diesen kann im vis eine Tabelle ausgegeben werden (z.B. über das Widget 'basic - Tabelle').

            Bei mir läuft das Script nun so wie es soll 🙂 Ich werde noch weitere konfigurierbare Filter später hinzufügen.

            Wonach würdet Ihr denn gerne noch filtern?

            <size size="150">Das Script ist ab sofort auf GitHub:</size>

            LINK: https://github.com/Mic-M/iobroker.logfile-script

            1 Reply Last reply Reply Quote 0
            • S
              stephan61 last edited by

              Hallo Mic danke für das script bekommen aber folgende Fehlermeldung

              516_log.jpg

              Gruß Stephan

              1 Reply Last reply Reply Quote 0
              • Mic
                Mic Developer last edited by

                Hi Stephan, danke für Dein Feedback. Ist oben korrigiert (Version 0.2), war ein falscher Name einer Funktion referenziert.

                Ich arbeite derzeit noch an personalisierten Filtern, z.B. alle Errors und Warnings nach Suchbegriff (z.B. denon.0) in einem State, etc.

                Update folgt.

                1 Reply Last reply Reply Quote 0
                • Mic
                  Mic Developer last edited by

                  Ich habe das Script nun entsprechend erweitert, es werden Datenpunkte mit optionalen Filtern und Blacklist erstellt.

                  Alles frei konfigurierbar.

                  Beispiel für einen Datenpunkt:

                    // Beispiel für individuellen Eintrag. Hier wird Euer Hubschrauber-Landeplatz
                    // überwacht :-) Wir wollen nur Einträge vom Adapter 'hubschr.0'.
                    // Dabei sollen entweder Wetterwarnungen, Alarme, oder UFOs gemeldet werden.
                    // Alles unter Windstärke "5 Bft" interessiert uns dabei nicht, daher haben
                    // wir '0 Bft' bis '4 Bft' auf die Blackliste gesetzt.
                    {
                      id:          'hubschrauberlandeplatz',
                      filter_all:  ['hubschr.0'],
                      filter_any:  ['wetterwarnung', 'alarm', 'ufo'],
                      blacklist:   ['0 Bft', '1 Bft', '2 Bft', '3 Bft', '4 Bft'],
                    },
                  

                  Läuft soweit stabil bei mir…

                  Ausgabebeispiel im vis, Widget 'basic - Tabelle':
                  6940_vis.jpg

                  Script ab sofort bei GitHub: https://github.com/Mic-M/iobroker.logfile-script

                  1 Reply Last reply Reply Quote 0
                  • sigi234
                    sigi234 Forum Testing Most Active last edited by

                    Fehler:

                    host.Medion	2018-07-22 18:18:01.396	error	instance system.adapter.javascript.0 terminated with code 0 (OK)
                    host.Medion	2018-07-22 18:18:01.396	error	Caught by controller[0]: at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:511:3)
                    host.Medion	2018-07-22 18:18:01.396	error	Caught by controller[0]: at script.js.Sigi.Log_Script_für_ioBroker:330:9
                    host.Medion	2018-07-22 18:18:01.396	error	Caught by controller[0]: at L_processLogAndSetToState (script.js.Sigi.Log_Script_für_ioBroker:409:43)
                    host.Medion	2018-07-22 18:18:01.396	error	Caught by controller[0]: TypeError: Cannot read property 'substr' of undefined
                    javascript.0	2018-07-22 18:18:01.354	error	TypeError: Cannot read property 'substr' of undefined at L_processLogAndSetToState (script.js.Sigi.Log_Script_für_ioBroker:409:43) at script.js.Sigi.Log_Script_für_ioBroker:330:9 at FSReqW
                    javascript.0	2018-07-22 18:18:01.354	error	uncaught exception: Cannot read property 'substr' of undefined
                    

                    Habe den Log Pfad angepasst, da Windows 10…

                    Konfiguration: Pfade
                     ******************************************************************************/
                    // Pfad, unter dem die States in den Objekten angelegt werden.
                    const L_STATE_PATH = 'javascript.'+ instance + '.' + 'mylog';
                    
                    // Pfad zu dem Log-Verzeichnis auf dem Linux-Rechner.
                    // Der Standard-Pfad ist '/opt/iobroker/log/'.
                    const L_LOG_PATH = '/iobroker/log/';
                    
                    // Leer lassen! Nur setzen, falls ein eigener Filename für das Logfile verwendet wird
                    const L_LOG_FILENAME = '';
                    
                    
                    1 Reply Last reply Reply Quote 0
                    • Q
                      quorle last edited by

                      Hey, wollte das Script heute mal ausprobieren, aber es kommen leider immer Fehler, wo der ganze Javascript Adapter neu gestartet wird.

                      5278_log.png

                      Habe im Script bisher nichts geändert, nur folgendes Hinzugefügt:

                      5278_conf.png

                      1 Reply Last reply Reply Quote 0
                      • Mic
                        Mic Developer last edited by

                        Danke für Eure Rückmeldung, ich konnte das Problem nachstellen, das ist schon mal das wichtigste 🙂

                        Bugfix folgt.

                        1 Reply Last reply Reply Quote 0
                        • Mic
                          Mic Developer last edited by

                          Problem nun behoben, hier die neue Version 0.4:

                          https://github.com/Mic-M/iobroker.logfile-script

                          1 Reply Last reply Reply Quote 0
                          • Q
                            quorle last edited by Jey Cee

                            Leider wird bei mir nichts im "garten" angezeigt. Was habe ich falsch gemacht?

                            //
                            // Die Filter-Einträge können natürlich beliebig geändert und erweitert werden,
                            // bitte aber den Aufbau beibehalten.
                            //
                            const L_FILTER = [
                             {
                               id:          'all',    // wir wollen hier alle Logeinträge, keine Filterung
                               filter_all:  ['', ''], // wird ignoriert, wenn leer
                               filter_any:  ['', ''], // wird ignoriert, wenn leer
                               blacklist:   ['', ''], // wird ignoriert, wenn leer
                             },
                             {
                               id:          'debug',
                               filter_all:  [' - debug: '], // nur Logeinträge mit Level 'debug'
                               filter_any:  ['', ''],
                               blacklist:   ['', ''],
                             },
                             {
                               id:          'info',
                               filter_all:  [' - info: '],  // nur Logeinträge mit Level 'info'
                               filter_any:  ['', ''],
                               blacklist:   ['', ''],
                             },
                             {
                               id:          'warn',
                               filter_all:  [' - warn: '],  // nur Logeinträge mit Level 'warn'
                               filter_any:  ['', ''],
                               blacklist:   ['', ''],
                             },
                             {
                               id:          'error',
                               filter_all:  [' - error: '],  // nur Logeinträge mit Level 'error'
                               filter_any:  ['', ''],
                               blacklist:   ['', ''],
                             },
                             {
                               id:          'warnanderror',
                               filter_all:  ['', ''],
                               filter_any:  [' - error: ', ' - warn: '],
                               blacklist:   ['javascript.0 ^', 'no playback content', ''],
                             },
                             // Beispiel für individuellen Eintrag. Hier wird Euer Hubschrauber-Landeplatz
                             // überwacht :-) Wir wollen nur Einträge vom Adapter 'hubschr.0'.
                             // Dabei sollen entweder Wetterwarnungen, Alarme, oder UFOs gemeldet werden.
                             // Alles unter Windstärke "5 Bft" interessiert uns dabei nicht, daher haben
                             // wir '0 Bft' bis '4 Bft' auf die Blackliste gesetzt.
                             //{
                               //id:          'hubschrauberlandeplatz',
                               //filter_all:  ['hubschr.0'],
                               //filter_any:  ['wetterwarnung', 'alarm', 'ufo'],
                               //blacklist:   ['0 Bft', '1 Bft', '2 Bft', '3 Bft', '4 Bft'],
                             //},
                             {
                               id:          'garten',
                               filter_all:  ['javascript.0'],
                               filter_any:  ['garten', 'alarm', 'info'],
                               blacklist:   ['', ''],
                             },
                            ];
                            
                            MartinK. 1 Reply Last reply Reply Quote 0
                            • Mic
                              Mic Developer last edited by

                              @quorle:

                              Leider wird bei mir nichts im "garten" angezeigt. Was habe ich falsch gemacht? `

                              Kannst Du mir mal den Auszug der Logdatei schicken (hier oder PM), der das betrifft und der nicht erscheint? Am besten direkt den von der Server-Datei, aber der aus dem ioBroker geht auch, brauche nur 1-2 Beispiele.

                              1 Reply Last reply Reply Quote 0
                              • Q
                                quorle last edited by

                                Habe gerade mal nach gesehen, jetzt funktioniert es und die States sind gefüllt

                                1 Reply Last reply Reply Quote 0
                                • Mic
                                  Mic Developer last edited by

                                  Update auf Version 0.5.

                                  • Neuer Parameter "clean": damit kann man Zeichenfolgen aus den Logzeilen entfernen.

                                  • Neuer Parameter "columns" für die JSON-Tabellen-Ausgabe fürs vis: Damit kann man die Spalten sortieren und nicht gewünschte entfernen

                                  • Neuer Datenpunkt "JSONcount" für jeden Filter. Da wird schon mal die Anzahl der Logzeilen angezeigt.

                                  Hier: https://github.com/Mic-M/iobroker.logfile-script

                                  Neues To Do für mich: 🙂

                                  Möchte einen Button "Leeren" oder so für jeden Filter als Datenpunkt zur Verfügung stellen. Damit kann man dann das Log leeren. Wäre cool für das vis z.B. für Metro-Widgets, die ja die Anzahl von Meldungen anzeigen. Dann kann man reingehen, diese lesen und dann als "gelesen markieren". Dann wird das Log geleert und die Anzahl des Metro-Widgets auf 0 gesetzt.

                                  Sollte der Sommer verregnet werden, werde ich mich mal daran setzen und als Adapter zur Verfügung stellen. Adapter-Programmierung sind für mich noch böhmische Dörfer, da muss ich mich erst mal einarbeiten, und das kostet echt Zeit.

                                  1 Reply Last reply Reply Quote 0
                                  • W
                                    Walkinlarge2010 last edited by

                                    Erst mal vielen Dank für das Script. Es funktioniert einwandfrei.

                                    Hast du eine Idee wie ich es lösen kann, dass ich es auf einem Multihostsystem betreiben kann und das log von beiden Systemen (in einer Tabelle) sehe?

                                    Aktuell zeigt er mir das Log nur von dem system, auf dem auch die Java Engine installiert ist. Ich könnte auf dem anderen Host nun auch Java Installieren, müsste dann aber zwei Logs in VIS darstellen. Hätte das gerne möglichst ein einer Tabelle 🙂

                                    Zusätzlich noch allgemein die Frage, kann ich im VIS das Basic Table JSON Widget farblich anders formatieren? Das Grau/Schwarz passt nicht so ganz in meine Views 😉

                                    Danke!

                                    Viele Grüße Walkinlarge

                                    1 Reply Last reply Reply Quote 0
                                    • Q
                                      quorle last edited by

                                      Hey, sei gegrüßt,

                                      also ich finde das Script wirklich nice, danke dafür.

                                      Aber wie kann ich die JSON Tabelle einstellen, wie sie aussehen soll und was alles angezeigt werden soll? da blicke ich so ohne Anleitung noch nicht durch :shock:

                                      1 Reply Last reply Reply Quote 0
                                      • Mic
                                        Mic Developer last edited by

                                        Hi Walkinlarge,

                                        danke für Dein Feedback.

                                        @Walkinlarge2010!:

                                        Hast du eine Idee wie ich es lösen kann, dass ich es auf einem Multihostsystem betreiben kann und das log von beiden Systemen (in einer Tabelle) sehe?

                                        Aktuell zeigt er mir das Log nur von dem system, auf dem auch die Java Engine installiert ist. Ich könnte auf dem anderen Host nun auch Java Installieren, müsste dann aber zwei Logs in VIS darstellen. Hätte das gerne möglichst ein einer Tabelle 🙂 `

                                        Ich habe keinerlei Erfahrungen mit Multihostsystemen, aber man könnte natürlich auch mehrere Log-Files gleichzeitig unterstützen in dem Script.

                                        Der Pfad zum Logfile ist ja typischerweise '/opt/iobroker/log/'. Wie ist denn der Pfad bei Dir dann zum log-Verzeichnis vom zweiten System, wenn Du von System 1 darauf per JavaScript zugreifst? Kann man diesen auch einfach in eine Variable legen wie etwa 'XYZ_System2/xx/yy/opt/iobroker/log/'?

                                        @Walkinlarge2010!:

                                        Zusätzlich noch allgemein die Frage, kann ich im VIS das Basic Table JSON Widget farblich anders formatieren? Das Grau/Schwarz passt nicht so ganz in meine Views 😉 `

                                        Ich bin da auch noch am basteln 🙂 Ich habe bei mir auf grau/weiß eingestellt. Dazu im Widget bei CSS-Klasse z.B. "test" eintragen:
                                        6940_zwischenablage01.png

                                        Dann im Tab "CSS" z.B. folgendes hinzufügen:

                                        ! ````
                                        .test-th1 {
                                        width: 40px;
                                        text-align: center;
                                        color: black;
                                        font-size: 11px;
                                        padding: 3px;
                                        }
                                        ! .test-tr:nth-child(odd) {
                                        font-size: 11px;
                                        color: black;
                                        background-color: white;
                                        }
                                        ! .test-tr:nth-child(even) {
                                        font-size: 11px;
                                        color: black;
                                        background-color: #F2F2F2;
                                        }

                                        
                                        Farben dann im CSS beliebig anpassen ( background-color:).
                                        1 Reply Last reply Reply Quote 0
                                        • Mic
                                          Mic Developer last edited by

                                          @quorle:

                                          Aber wie kann ich die JSON Tabelle einstellen, wie sie aussehen soll und was alles angezeigt werden soll? da blicke ich so ohne Anleitung noch nicht durch :shock: `

                                          Hi quorle,

                                          danke auch für Dein Feedback. Die anzuzeigenden Spalten stellst Du in der Konfiguration des Scripts ein. Hier als Beispiel, beachte dabei die Zeile, die mit "columns", also Spalten anfängt:

                                            {
                                              id:          'hubschrauberlandeplatz',
                                              filter_all:  ['hubschr.0'],
                                              filter_any:  ['wetterwarnung', 'alarm', 'ufo'],
                                              blacklist:   ['0 Bft', '1 Bft', '2 Bft', '3 Bft', '4 Bft'],
                                              clean:       ['****', '!!!!', 'ufo gesichtet'],
                                              columns:     ['date','level','source','msg'],
                                            }, 
                                          

                                          Damit werden standardmäßig mit der JSON-Tabelle die Spalten "Date", "Level" (also debug, error, info, etc.), "Source" (also z.B. Adaptername), sowie "Msg", also der Logeintrag angezeigt. Möchtest Du z.B. nur 2 Spalten mit Datum und Logeintrag, so änderst Du die Zeile wie folgt:

                                              columns:     ['date','msg'],
                                          

                                          Soll z.B. in der 1. Spalte der Logeintrag (msg) stehen und in der 2. Spalte das Datum, so änderst Du die Reihenfolge:

                                              columns:     ['msg','date'],
                                          
                                          1 Reply Last reply Reply Quote 0
                                          • Mic
                                            Mic Developer last edited by

                                            <size size="150">Update auf Version 0.5.1 BETA</size>

                                            Jetzt kann man im vis einen Button "Log als gelesen markieren" (oder ähnlichen Namen dafür) einbauen. Beim Drücken auf den Button wird dann im vis die JSON-Tabelle geleert, und nur noch neuere Logs werden danach angezeigt (Aktualisierung dauert etwas, je nach Einstellung von L_SCHEDULE im Script).

                                            Dazu sind pro Filter folgende States verfügbar:
                                            <list type="decimal">4. log[Filter]JSONclear –> das ist der Button, der im vis auszulösen wird.

                                            1. log[Filter]JSONclearDateTime –> hier wird dann aktuelles Datum/Uhrzeit gesetzt. Alle älteren Logeinträge werden dann im vis nicht mehr gezeigt

                                            2. log[Filter]JSONcount –> Anzahl Log-Einträge, kann ebenfalls dann in vis genutzt werden z.B. zur Anzeige auf Widget.

                                            So kann man sich z.B. bestimmte Meldungen filtern, und sobald gelesen auf den Button drücken, dann erscheinen diese nicht mehr.

                                            Das ganze noch als Beta-Release, ich muss das noch ein wenig testen, aber soweit funktioniert es sehr gut bei mir.

                                            Sieht dann so in meinem Test-vis aus. Unten sieht man, dass es 60 neue Logs zu lesen gibt. Auf "Errors and "Warning" kann dann der Button oben rechts gedrückt werden, dann werden diese wieder auf 0 gesetzt.

                                            6940_testumg_vis.png

                                            6940_zwischenablage01.png

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            867
                                            Online

                                            31.6k
                                            Users

                                            79.4k
                                            Topics

                                            1.3m
                                            Posts

                                            60
                                            617
                                            108026
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo