2016-06-29 37 views
6

Obiettivo: impedire schedule di registrare ogni volta che viene eseguito.Disattiva la registrazione nella libreria di pianificazione

Background:

Sto usando le librerie logging e schedule in un progetto di pitone.

Il mio file di registro contiene informazioni sullo stato fisico di uno strumento eseguito da un Raspberry Pi e viene aggiornato ogni 10 secondi.

Io uso la libreria schedule per pianificare quel registro periodico.

Here è la documentazione limitata che ho trovato per schedule.

Il problema:

I schedule biblioteca tronchi questa affermazione, ogni volta che viene eseguito un lavoro.

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

la funzione che schedule chiamate è update_log(), una funzione che calcola le variabili incluse nel registro mi passano ogni dieci secondi e li registra (esempio qui sotto).

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

Perché schedule sta producendo una propria (abbastanza inutile) linea di log, rende la registrazione che sto effettivamente cercando di fare molto difficile da leggere.

L'obiettivo:

Impedire schedule dalla registrazione che prima affermazione.

+0

Cosa ne pensi di impostare il livello del registro su un valore superiore a INFO (AVVISO) e di effettuare il logging al livello di AVVISO? – bernie

+1

Btw, ADORO il modulo 'schedule'. – bernie

+0

Questo risolverebbe il problema, ma sembra più un trucco per anatra che una soluzione. Uso anche l'avviso per eventi anomali, ma non così terribili da impedire il processo. –

risposta

5

Il modulo schedule è exclusively using the logger called schedule. È possibile utilizzare la libreria logging su disable this logger from writing to your main logger.

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

Se non si desidera schedule s' i registri a tutti, è anche possibile disattivarlo dalle impostazioni il suo livello di log di sopra di qualsiasi livello di log reale.

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

Dal python2.7, è anche possibile utilizzare un NullHandler invece.

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

Questo funziona per disabilitare la riga di programma nel registro, ma ottengo un 'Nessun gestore trovato per il programma di registrazione" pianificazione "' avviso una volta all'inizio del programma. –

+0

@MichaelMolter Ho aggiunto una descrizione su come disabilitare completamente la registrazione di 'schedule'. – MisterMiyagi

+1

Non ero a conoscenza di poter modificare la priorità dei singoli logger. Ho impostato il livello su 'logging.CRITICAL' per rimuovere l'avviso e permetto comunque di registrare gli errori critici. Grazie! –

Problemi correlati