Ankündigung

Einklappen
Keine Ankündigung bisher.

Logging...?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Morg
    antwortet
    Okay, manche Fragen lösen sich durch probieren.

    Wenn ich class: logging.NullHandler angebe, geht es (so wie beim StreamHandler). Das "reguläre" Logging kann ich damit unterdrücken.

    Die vier Meldungen (ENGINE Bus STARTING usw) kommen von CherryPy und sind idiotischerweise als "ERROR" klassifiziert. Neben der mMn falschen Einordnung loggt cherrypy die parallel noch auf StdErr und damit indirekt auf die sichtbare Konsole. Könnte man userseitig mit Umleitungen filtern.

    Die Fragen zu den IP-Logmeldungen schiebe ich mal in den Webservices-Thread

    Einen Kommentar schreiben:


  • Morg
    antwortet
    Noch eine andere Frage: ich habe mal versucht, einzelne Log-Ebenen ("logger"?) auszuschalten; gibt es dafür spezielle Optionen?

    Ich habe in der Python-Doc zum logging den NullHandler gefunden, der würde genau tun, was ich möchte (einfach nicht loggen), aber wenn ich versuche, den so einzubinden, wie auch StreamHandler oder TimedRotatingFileHandler eingebunden werden (class: logging.handlers.NullHandler), bekomme ich einen Haufen Fehler...

    Code:
    Traceback (most recent call last):
      File "/usr/lib/python3.7/logging/config.py", line 389, in resolve
        self.importer(used)
    ModuleNotFoundError: No module named 'logging.handlers.NullHandler'; 'logging.handlers' is not a package
    
    The above exception was the direct cause of the following exception:
    
    Traceback (most recent call last):
      File "/usr/lib/python3.7/logging/config.py", line 562, in configure
        handler = self.configure_handler(handlers[name])
      File "/usr/lib/python3.7/logging/config.py", line 712, in configure_handler
        klass = self.resolve(cname)
      File "/usr/lib/python3.7/logging/config.py", line 396, in resolve
        raise v
      File "/usr/lib/python3.7/logging/config.py", line 389, in resolve
        self.importer(used)
    ValueError: Cannot resolve 'logging.handlers.NullHandler': No module named 'logging.handlers.NullHandler'; 'logging.handlers' is not a package
    
    The above exception was the direct cause of the following exception:
    
    Traceback (most recent call last):
      File "bin/smarthome.py", line 1318, in <module>
        sh = SmartHome(extern_conf_dir=extern_conf_dir)
      File "bin/smarthome.py", line 288, in __init__
        self.init_logging(self._log_conf_basename, MODE)
      File "bin/smarthome.py", line 515, in init_logging
        logging.config.dictConfig(doc)
      File "/usr/lib/python3.7/logging/config.py", line 799, in dictConfig
        dictConfigClass(config).configure()
      File "/usr/lib/python3.7/logging/config.py", line 570, in configure
        '%r' % name) from e
    ValueError: Unable to configure handler 'nolog'
    Den NullHandler gibt es seit Python 3.1, kann es sein, dass man den in shng erst aktivieren müsste?

    Einen Kommentar schreiben:


  • Msinn
    antwortet
    Da das netwpork Plugin als ein Teil von shng Logger nutzt, die in der logging.yaml definiert simd und Du dort keinen Formatter hast der ein solches Log Format erzeugt, stimmt wohl Deine Annahme das das aus einem genutzten Package kommt (analog zum cherrypy Output). Wie gesagt, das console Logging kann man nicht vernünftig kontrollieren....

    Einen Kommentar schreiben:


  • Morg
    antwortet
    Ja, es gibt Editoren, die "live scrolling" machen. Aber wie gesagt, das wäre noch ein Fenster mehr.

    Das knx-Plugin ist das normale, aber das hat hier glaube ich nix zu suchen.

    Ich frage von außerhalb (mit python urllib) per network-Plugin die beiden Items ab, und die Zeilen sehen aus wie Zugriffs"logs", vorn die Quell-IP, dann das HTTP-Kommando (GET und URL) mit Status, und hinten der User-Agent (urllib). Das muss also vom network-Plugin oder von einer dort eingebundenen Library kommen. Was anderes kann ich mir da nicht vorstellen.

    Einen Kommentar schreiben:


  • Msinn
    antwortet
    Nein, bei macht der Editor (läuft auf meinem Mac) einfach weiter wenn ich auf meinem NUC shng neu starte...

    Die beiden HTTP GET Zeilen enthalten ja einen Hinweis auf knx. Nutzt Du das normale knx Plugn oder das von thengsty? Hast Du evtl. Bus Monitorig konfiguriert oder ähnliches?

    Einen Kommentar schreiben:


  • Morg
    antwortet
    Im normalen Betrieb ist das auch völlig ok. Aber wenn ich am Plugin baue, muss ich ständig shng anhalten und neu starten, wenn irgendwo ein Syntaxfehler ist oder etwas nicht so geht, wie es soll. Da müsste ich dann entweder den Editor nicht nur neu laden lassen, sondern live mitscrollen lassen - dann braucht das neben Editor für den Code und dem Terminal noch ein Fenster und ich müsste auch immer hin und her wechseln, statt nur im Terminal zu scrollen.

    Für den Dauerbetrieb passt das Logging ja.

    Die ersten vier Zeilen ("ENGINE...") schreibt cherrypy anscheinend so auf die Konsole, ich habs zum Testen jetzt deaktiviert, das Modul. Woher der Rest kommt, weiß ich nicht. Das Network-Plugin hat keine (für mich) erkennbaren Log-Anweisungen, die so "komisch" (ohne Log-Format) schreiben. Da werde ich bei Gelegenheit nochmal weiter reinschauen, das zwickt mich jetzt, dass ich das nicht finde...

    Einen Kommentar schreiben:


  • Msinn
    antwortet
    In den Logfiles kannst Du cherrypy recht gut wegfiltern. Das funktioniert aber nicht für das console logging, weshalb ich console logging überhaupt nicht mehr nutze (einfach zu schlecht konfigurierbar). Ich mache einfach das entsprechende Logfile in einem Editor auf, der bei Aktualisierungen der Datei die Änderungen automatisch nachlädt.

    Einen Kommentar schreiben:


  • Msinn
    antwortet
    Zitat von Morg Beitrag anzeigen
    Weißt du, was die Ausgaben im vorherigen Beitrag sind bzw. wer die verursacht und wie man die abstellen kann?
    Die cherrypy Einträge kommen durch einen Logger den cherrypy selber erzeugt Die kann man nicht abstellen, sondern nur kanalisieren (so gut es geht).
    Einen Teil kannst Du loswerden, wenn Du einen Logger cherrypy.access anlegst und die Einträge in die Walachei schickst.

    Ganz los kann man die nur werden, wenn man einen Logfilter programmiert und im Abschnitt filters: in die logging.yaml einbindet. (Dazu müsstest Du die Python Doku bemühen.)

    Einen Kommentar schreiben:


  • Morg
    antwortet
    [Einrückungen] Arg... okay, danke, das probiere ich erstmal

    edit: okay, der priv_viessmann geht jetzt wieder. War ein blöder Fehler, das hätte ich auch merken können.

    Die anderen Logdaten kommen allerdings immer noch.
    Zuletzt geändert von Morg; 12.12.2020, 18:35.

    Einen Kommentar schreiben:


  • Morg
    antwortet
    Der kommt aus der smartplugin-Klasse:

    Code:
    ...
        # initialize logger if necessary
        if '.'.join(VERSION.split('.', 2)[:2]) <= '1.5':
            self.logger = logging.getLogger(__name__)
    ...
    Soweit ich das verstanden habe, initialisiert die SmartPlugin-Klasse den ja selbst, also wird der Code oben nur in der älteren shng-Version ausgeführt...

    Weißt du, was die Ausgaben im vorherigen Beitrag sind bzw. wer die verursacht und wie man die abstellen kann? Die scheinen ja auch nicht dem Loggingformat zu entsprechen. Ich habe auch mit "Bus" und "STARTING" keine Dateien in ./modules/ finden können, um dem auf den Grund zu gehen.

    Die ersten vier Zeilen sind ja irgendwo aus CherryPy, daher die Portnummern, richtig?
    Die weiteren Ausgaben sind Reaktionen auf Abfragen an das network-Plugin. Gibt es da noch ein Logging, das nicht abgefangen wird?

    Einen Kommentar schreiben:


  • Msinn
    antwortet
    Ich habe eben noch gesehen, dass Deine logging.yaml falsch ist.

    Deine Logger müssen in den Abschnitt loggers: und nicht auf die oberste Ebene. Auf die oberste Ebene gehört nur der root-Logger. Also einrücken:

    Code:
    loggers:
        __main__:
            level: WARNING
            handlers: [shng_warnings_file]
    
        #
        # add "special" logger here, e.g. isolated plugin
        #
        #    plugins.kodi:
        #        level: DEBUG
        #        handlers: [shng_special_file, console]
    
        plugins.priv_viessmann:
            level: DEBUG
            handlers: [shng_special_file, console]
    
        cherrypy.access:
            level: ERROR
            handlers: [shng_warnings_file]
    
        cherrypy.error:
            level: ERROR
            handlers: [shng_warnings_file]
    
    root:
        level: WARNING
        handlers: [shng_warnings_file]

    Einen Kommentar schreiben:


  • Msinn
    antwortet
    Wie heisst denn der Logger in Deinem Plugin? Hast Du selber einen initialisiert oder nutzt Du den Logger den die SmartPlugin Klasse initialisiert?

    Zur Sicherheit kannst Du in der Admin GUI auch unter Logs/Liste der Logger nachsehen.
    Dort siehst Du welche Logger initialisiert sind, welchen Minimal Level sie loggen, welchen Handler sie nutzen und in welche Datei sie schreiben.

    Einen Kommentar schreiben:


  • Morg
    antwortet
    Mannomann, irgendwie komme ich mit dem Logging nicht klar.. mal wieder.

    Ich möchte
    - verschiedene WARNING-Level in das smarthome-warning schreiben
    - das aktuell in Entwicklung befindliche priv_viessmann DEBUG in ./shng.log und auf die Konsole schreiben
    - sonst NICHTS auf der Konsole haben.

    Ich starte shng.py mit

    python3 bin/smarthome.py -f

    und erhalte
    Code:
    [12/Dec/2020:18:07:53] ENGINE Bus STARTING
    [12/Dec/2020:18:07:53] ENGINE Serving on http://192.168.2.231:8383
    [12/Dec/2020:18:07:54] ENGINE Serving on http://192.168.2.231:8384
    [12/Dec/2020:18:07:54] ENGINE Bus STARTED
    192.168.2.231 - - [12/Dec/2020:18:07:55] "GET /ws/items/d.stat.knx.last_data HTTP/1.1" 404 3872 "" "Python-urllib/3.7"
    192.168.2.231 - - [12/Dec/2020:18:07:55] "GET /ws/items/d.stat.knx.activity HTTP/1.1" 404 3871 "" "Python-urllib/3.7"
    Meine Konfiguration:

    Code:
    # etc/logging.yaml
    
    version: 1
    disable_existing_loggers: True
    formatters:
        shng_simple:
            format: '%(asctime)s %(levelname)-8s %(name)-19s %(message)s'
            datefmt: '%Y-%m-%d  %H:%M:%S'
    
        shng_detail:
            format: '%(asctime)s %(levelname)-8s %(module)-17s %(threadName)-12s %(message)s  --  (%(filename)s:%(funcName)s:%(lineno)d)'
            datefmt: '%Y-%m-%d %H:%M:%S %Z'
    
        shng_special:
            format: '%(asctime)s %(levelname)-3s %(name)-16s %(funcName)-16s %(message)s'
            datefmt: '%H:%M:%S'
    
    handlers:
        console:
            class: logging.StreamHandler
            formatter: shng_special
            stream: ext://sys.stdout
    
        shng_warnings_file:
            class: logging.handlers.TimedRotatingFileHandler
            formatter: shng_simple
            level: WARNING
            when: midnight
            backupCount: 7
            filename: ./var/log/smarthome-warnings.log
            encoding: utf8
    
        shng_details_file:
            class: logging.handlers.TimedRotatingFileHandler
            formatter: shng_detail
            level: DEBUG
            when: midnight
            backupCount: 7
            filename: ./var/log/smarthome-details.log
            encoding: utf8
    
        shng_special_file:
            class: logging.handlers.TimedRotatingFileHandler
            formatter: shng_special
            level: DEBUG
            when: midnight
            backupCount: 7
            filename: ./shng.log
            encoding: utf8
    
    loggers:
        __main__:
            level: WARNING
            handlers: [shng_warnings_file]
    
    #
    # add "special" logger here, e.g. isolated plugin
    #
    #    plugins.kodi:
    #        level: DEBUG
    #        handlers: [shng_special_file, console]
    plugins.priv_viessmann:
        level: DEBUG
        handlers: [shng_special_file, console]
    
    cherrypy.access:
        level: ERROR
        handlers: [shng_warnings_file]
    
    cherrypy.error:
        level: ERROR
        handlers: [shng_warnings_file]
    
    root:
        level: WARNING
        handlers: [shng_warnings_file]
    Was mache ich falsch? Woher kommen die Meldungen?

    Und wieso bekomme ich keine Plugin-Ausgabe? Ich habe sowohl plugins.priv_viessmann als auch plugins.viessmann probiert, ohne Unterschied...

    Einen Kommentar schreiben:


  • Morg
    antwortet
    Okay, danke dir!

    Einen Kommentar schreiben:


  • Msinn
    antwortet
    Zitat von Morg Beitrag anzeigen
    Den Loglevel im Betrieb zu ändern hilft mir aber nicht wirklich... wozu sollte ich das brauchen?
    Wenn Du im Betrieb ein merkwürdiges Verhalten hast, kannst Du den Loglevel hochdrehen und damit Logeinträge bekommen, die Du vielleicht nach einem Neustart nicht hättest.

    An die CherryPy Logger (access und error) kommst Du ran, wenn Du sie in logging.yaml definiert hast. Das Screen Logging könnte man zwar auch darüber einstellen, aber das braucht wirklich keiner. Ich habe (Deinem Vorschlag folgend) das im http Modul abgestellt.

    Einen Kommentar schreiben:

Lädt...
X