2012-06-27 17 views
26

Sto già utilizzando una configurazione di registrazione di base in cui tutti i messaggi su tutti i moduli sono memorizzati in un singolo file. Tuttavia, ho bisogno di una soluzione più complessa ora:Accesso a due file con impostazioni diverse

  • Due file: il primo rimane lo stesso.
  • Il secondo file dovrebbe avere un formato personalizzato.

Ho letto i documenti per il modulo, ma sono molto complessi per me al momento. Forestale, i gestori ...

Così, in breve:

Come accedere a due file in Python 3, vale a dire:

import logging 
# ... 
logging.file1.info('Write this to file 1') 
logging.file2.info('Write this to file 2') 

risposta

53

si può fare qualcosa di simile:

import logging 
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') 


def setup_logger(name, log_file, level=logging.INFO): 
    """Function setup as many loggers as you want""" 

    handler = logging.FileHandler(log_file)   
    handler.setFormatter(formatter) 

    logger = logging.getLogger(name) 
    logger.setLevel(level) 
    logger.addHandler(handler) 

    return logger 

# first file logger 
logger = setup_logger('first_logger', 'first_logfile.log') 
logger.info('This is just info message') 

# second file logger 
super_logger = setup_logger('second_logger', 'second_logfile.log') 
super_logger.error('This is an error message') 

def another_method(): 
    # using logger defined above also works here 
    logger.info('Inside method') 
+1

Il livello di registro predefinito è 'logging.WARNING', quindi sarebbe più chiaro se viene chiamato' Logger.setLevel (logging.WARNING) '. – zeekvfu

+1

Perché il mio 'logger_1' non viene esportato nel file di registro? Ho impostato 'logger_1.error ('error foo')', ma non funziona ancora – Gank

+0

ti dispiacerebbe incollare il tuo codice qui – eos87

8
def setup_logger(logger_name, log_file, level=logging.INFO): 
    l = logging.getLogger(logger_name) 
    formatter = logging.Formatter('%(message)s') 
    fileHandler = logging.FileHandler(log_file, mode='w') 
    fileHandler.setFormatter(formatter) 
    streamHandler = logging.StreamHandler() 
    streamHandler.setFormatter(formatter) 

    l.setLevel(level) 
    l.addHandler(fileHandler) 
    l.addHandler(streamHandler)  


setup_logger('log1', txtName+"txt") 
setup_logger('log2', txtName+"small.txt") 
logger_1 = logging.getLogger('log1') 
logger_2 = logging.getLogger('log2') 




logger_1.info('111messasage 1') 
logger_2.info('222ersaror foo') 
+0

Sono logger_1 e logger_2 globali? Io posso usarli in qualsiasi funzione? in caso contrario, è una buona idea renderli globali nella funzione principale def? se sì, come faresti a riguardo? – Dnaiel

Problemi correlati