2016-06-29 16 views
6

Ziel: verhindern, dass schedule jedes Mal protokolliert wird, wenn es ausgeführt wird.Deaktivieren der Protokollierung in der Zeitplanbibliothek

Hintergrund:

Ich verwende die logging und schedule Bibliotheken in einem Python-Projekt.

Meine Protokolldatei enthält Informationen über den physischen Zustand eines Instruments, das von einem Raspberry Pi ausgeführt wird, und wird alle 10 Sekunden aktualisiert.

Ich verwende die Bibliothek schedule, um dieses periodische Protokoll zu planen.

Here ist die begrenzte Dokumentation, die ich für schedule gefunden habe.

Das Problem:

Die schedule Bibliothek protokolliert diese Aussage, läuft jedes Mal einen Job.

2016-06-29 09:01:51,022 INFO: Running job every 10 seconds do update_log() (Last run... 

Die Funktion, dass schedule Anrufe ist update_log(), eine Funktion, die ich laufen alle zehn Sekunden und protokolliert sie (Beispiel unten) enthalten die Variablen im Protokoll berechnet.

2016-06-29 09:01:51,022 INFO: Dist: 12.3 m Rate: 23.8 cm/s 

Da schedule sein eigenes (ziemlich nutzlos) Logzeile produziert, macht es die Protokollierung ich eigentlich bin versucht, sehr schwer zu tun zu lesen.

Das Ziel:

Prevent schedule von der ersten Anweisung anzumelden.

+0

Was denken Sie darüber, den Loglevel auf einen Wert höher als INFO (WARNING) zu setzen und Ihr Logging auf den WARNING-Level zu setzen? – bernie

+1

Btw, ich LIEBE das "Zeitplan" -Modul. – bernie

+0

Das würde das Problem lösen, aber es fühlt sich eher nach einem Enten-Band-Hack als nach einer Lösung an. Ich benutze auch eine Warnung für Ereignisse, die abnormal sind, aber nicht so schlimm, dass der Prozess gestoppt wird. –

Antwort

5

Das Modul schedule ist exclusively using the logger called schedule. Sie können die logging-Bibliothek zu disable this logger from writing to your main logger verwenden.

import logging 
logging.getLogger('schedule').propagate = False 

Wenn Sie nicht schedule wollen ‚s Protokolle überhaupt, können Sie es auch über eine wirkliche Protokollebene durch Einstellungen seine Protokollebene deaktivieren.

import logging 
logging.getLogger('schedule').setLevel(logging. CRITICAL + 10) 

Seit python2.7, können Sie auch eine NullHandler stattdessen verwenden.

import logging 
logging.getLogger('schedule').propagate = False 
logging.getLogger('schedule').addHandler(logging.NullHandler()) 
+0

Dies funktioniert, um die Einteilung im Protokoll zu deaktivieren, aber ich bekomme eine 'No Handler konnte für Logger" Schedule "' Warnung einmal zu Beginn des Programms gefunden werden. –

+0

@MichaelMolter Ich habe eine Beschreibung hinzugefügt, wie man die 'Schedule'-Protokollierung vollständig deaktiviert. – MisterMiyagi

+1

Mir war nicht bewusst, dass ich die Priorität einzelner Logger ändern konnte. Ich setze die Ebene auf "logging.CRITICAL", um die Warnung zu entfernen und weiterhin kritische Fehler zu protokollieren. Vielen Dank! –

Verwandte Themen