2013-04-09 7 views
14

Sto provando a scrivere un server che registra le eccezioni sia per la console che per un file. Ho tirato fuori del codice dal ricettario. Eccolo:Il modulo di registrazione Python non sta scrivendo nulla sul file

logger = logging.getLogger('server_logger') 
logger.setLevel(logging.DEBUG) 
# create file handler which logs even debug messages 
fh = logging.FileHandler('server.log') 
fh.setLevel(logging.DEBUG) 
# create console handler with a higher log level 
ch = logging.StreamHandler() 
ch.setLevel(logging.ERROR) 
# create formatter and add it to the handlers 
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S') 
ch.setFormatter(formatter) 
fh.setFormatter(formatter) 
# add the handlers to logger 
logger.addHandler(ch) 
logger.addHandler(fh) 

Questo codice registra perfettamente nella console, ma non viene registrato nulla nel file. Il file viene creato, ma non viene mai scritto nulla. Ho provato a chiudere il gestore, ma questo non fa nulla. Neanche lo fa arrossire. Ho cercato su Internet, ma a quanto pare sono l'unico con questo problema. Qualcuno ha idea di quale sia il problema? Grazie per le tue risposte.

+0

Quale comando si utilizza per accedere? Stai solo chiamando 'logging.debug()'? – Leopd

+0

Sto usando logging.error() – thePurpleMonkey

+0

Nessuna riproduzione per me. Il tuo codice funziona come previsto – wim

risposta

16

provare a chiamare

logger.error('This should go to both console and file') 

invece di

logging.error('this will go to the default logger which you have not changed the config of') 
+1

Oh hey! Questo ha fatto funzionare tutto! Sei un genio! Anche se non capisco perfettamente _why_ che ha funzionato ... – thePurpleMonkey

+5

buone capacità psichiche – wim

+2

Chiamando 'logging.error' usa il logger predefinito, che non hai configurato. La variabile 'logger' è quella che hai definito nella prima riga, che ha tutte le proprietà che hai configurato. – Leopd

1

So che questa domanda potrebbe essere un po 'troppo vecchio, ma ho trovato un po' di un eccessivo il metodo di cui sopra. Mi sono imbattuto in un problema simile, sono stato in grado di risolverlo da:

import logging 

logging.basicConfig(format = '%(asctime)s %(message)s', 
        datefmt = '%m/%d/%Y %I:%M:%S %p', 
        filename = 'example.log', 
        level=logging.DEBUG) 

Questo scriverà a example.log tutti i registri che sono di eseguire il debug di livello o superiore.

logging.debug("This is a debug message") scriverà This is a debug message a example.log. Il livello è importante perché funzioni.

+1

Ho anche pensato che l'OP fosse un po 'eccessivo per quello che volevo fare. Sto cercando di fare in modo che il codice funzioni, ma non crea alcun file per me, per non parlare di scriverlo. – Mymozaaa

+0

@Mymozaaa - https://docs.python.org/2/howto/logging.html#logging-to-a-file. Spero che questo ti aiuti. –

1

Provate a mettere l'importazione e il basicConfig all'inizio del copione. Qualcosa del genere:

import logging 
logging.basicConfig(filename='log.log', level=logging.INFO) 
. 
. 
import ... 
import ... 
Problemi correlati