2013-11-22 12 views
12

Sto cercando di utilizzare RotatingHandler per il nostro scopo di registrazione in Python. Ho mantenuto i file di backup come 500, il che significa che creerà un massimo di 500 file immagino e la dimensione che ho impostato è di 2000 byte (non sono sicuro qual è il limite di dimensioni consigliato).Come registrare tutto in un file usando RotatingFileHandler usando il file logging.conf?

Se eseguo il mio codice qui sotto, non registra tutto in un file. Voglio accedere tutto in un file -

#!/usr/bin/python 

import logging 
import logging.handlers 

LOG_FILENAME = 'testing.log' 

# Set up a specific logger with our desired output level 
my_logger = logging.getLogger('agentlogger') 

# Add the log message handler to the logger 
handler = logging.handlers.RotatingFileHandler(LOG_FILENAME, maxBytes=2000, backupCount=100) 

# create a logging format 
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') 
handler.setFormatter(formatter) 

my_logger.addHandler(handler) 

my_logger.debug('debug message') 
my_logger.info('info message') 
my_logger.warn('warn message') 
my_logger.error('error message') 
my_logger.critical('critical message') 

# Log some messages 
for i in range(10): 
    my_logger.error('i = %d' % i) 

Questo è ciò che viene stampato nel mio file testing.log -

2013-11-22 12:59:34,782 - agentlogger - WARNING - warn message 
2013-11-22 12:59:34,782 - agentlogger - ERROR - error message 
2013-11-22 12:59:34,782 - agentlogger - CRITICAL - critical message 
2013-11-22 12:59:34,782 - agentlogger - ERROR - i = 0 
2013-11-22 12:59:34,782 - agentlogger - ERROR - i = 1 
2013-11-22 12:59:34,783 - agentlogger - ERROR - i = 2 
2013-11-22 12:59:34,783 - agentlogger - ERROR - i = 3 
2013-11-22 12:59:34,783 - agentlogger - ERROR - i = 4 
2013-11-22 12:59:34,783 - agentlogger - ERROR - i = 5 
2013-11-22 12:59:34,783 - agentlogger - ERROR - i = 6 
2013-11-22 12:59:34,784 - agentlogger - ERROR - i = 7 
2013-11-22 12:59:34,784 - agentlogger - ERROR - i = 8 
2013-11-22 12:59:34,784 - agentlogger - ERROR - i = 9 

Non stampare INFO, DEBUG messaggio nel file in qualche modo .. Qualche idea sul perché non sta funzionando?

E inoltre, al momento, ho definito tutto in questo file python per scopi di registrazione. Voglio definire sopra le cose nel file logging conf e leggerlo usando la funzione fileConfig(). Non sono sicuro di come utilizzare l'esempio RotatingFileHandler nel file logging.conf?

UPDATE: -

Qui di seguito è il mio codice Python aggiornato che ho modificato per l'utilizzo con log.conf di file -

#!/usr/bin/python 

import logging 
import logging.handlers 

my_logger = logging.getLogger(' ') 
my_logger.config.fileConfig('log.conf') 

my_logger.debug('debug message') 
my_logger.info('info message') 
my_logger.warn('warn message') 
my_logger.error('error message') 
my_logger.critical('critical message') 

# Log some messages 
for i in range(10): 
    my_logger.error('i = %d' % i) 

E sotto è la mia log.conf file -

[loggers] 
keys=root 

[handlers] 
keys=logfile 

[formatters] 
keys=logfileformatter 

[logger_root] 
level=DEBUG 
handlers=logfile 

[logger_zkagentlogger] 
level=DEBUG 
handlers=logfile 
qualname=zkagentlogger 
propagate=0 

[formatter_logfileformatter] 
format=%(asctime)s %(name)-12s: %(levelname)s %(message)s 

[handler_logfile] 
class=handlers.RotatingFileHandler 
level=NOTSET 
args=('testing.log',2000,100) 
formatter=logfileformatter 

Ma ogni volta che lo compilo, questo è l'errore che ho ottenuto sulla mia console -

$ python logtest3.py 
Traceback (most recent call last): 
    File "logtest3.py", line 6, in <module> 
    my_logger.config.fileConfig('log.conf') 
AttributeError: 'Logger' object has no attribute 'config' 

Qualche idea di cosa stia facendo?

risposta

5

It doesn't print out INFO, DEBUG message into the file somehow.. Any thoughts why it is not working out?

che non sembrano per impostare un livello di log, in modo che il valore predefinito (avvertimento) viene utilizzato

da http://docs.python.org/2/library/logging.html:

Note that the root logger is created with level WARNING.

quanto riguarda la seconda domanda, qualcosa di simile dovrebbe fare il trucco (non l'ho provato, appena adattato dalla mia configurazione che utilizza il TimedRotatingFileHandler):

[loggers] 
keys=root 

[handlers] 
keys=logfile 

[formatters] 
keys=logfileformatter 

[logger_root] 
level=DEBUG 
handlers=logfile 

[formatter_logfileformatter] 
format=%(asctime)s %(name)-12s: %(levelname)s %(message)s 

[handler_logfile] 
class=handlers.RotatingFileHandler 
level=NOTSET 
args=('testing.log','a',2000,100) 
formatter=logfileformatter 
+0

Grazie .. Quindi, cosa ho intenzione di impostare per registrare tutto in un file? –

+0

Ho aggiunto alcuni estratti da una configurazione di lavoro che uso in un progetto, questo dovrebbe iniziare. Un esempio completo con più logger può essere trovato https://github.com/gryphius/fuglu/blob/master/fuglu/conf/logging.conf.dist – Gryphius

+0

Grazie a Gryphius per l'aiuto .. Un ultimo dubbio, quindi come sono andando a prendere il logger nel codice Python? qualche idea? Questa è la prima volta che lavoro con Python, quindi ho qualche problema. –

3

Lo so, è molto tardi, ma ho appena ricevuto lo stesso errore, e durante la ricerca ho avuto il tuo problema. Sono in grado di risolvere il mio problema, e ho pensato che potrebbe essere utile per qualche altro utente anche:

aver creato un oggetto logger e cercando di accedere my_logger.config.fileConfig ('log.conf') che è errato dovresti usare logger.config.fileConfig ('log.conf') come menzionato qui sotto e devi importare logging .config così:

#!/usr/bin/python 

import logging 
import logging.handlers 
import logging.config 

logging.config.fileConfig('log.config',disable_existing_loggers=0) 
my_logger = logging.getLogger('you logger name as you mention in your conf file') 

my_logger.debug('debug message') 
my_logger.info('info message') 
my_logger.warn('warn message') 
my_logger.error('error message') 
my_logger.critical('critical message') 

dopo aver fatto questi cambiamenti, AttributeError: oggetto 'Logger' non ha alcun attributo 'config' errore deve essere andato.

Problemi correlati