125 votes

Consignation dans deux fichiers avec des paramètres différents

J'utilise déjà une configuration d'enregistrement de base où tous les messages de tous les modules sont stockés dans un seul fichier. Cependant, j'ai maintenant besoin d'une solution plus complexe :

  • Deux fichiers : le premier reste le même.
  • Le second fichier doit avoir un format personnalisé.

J'ai lu les documents relatifs au module, mais ils sont très complexes pour moi en ce moment. Loggers, handlers...

Donc, en bref :

Comment enregistrer dans deux fichiers en Python 3, c'est-à-dire :

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

240voto

eos87 Points 2210

Vous pouvez faire quelque chose comme ça :

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

def setup_logger(name, log_file, level=logging.INFO):
    """To 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')

26voto

Gank Points 324
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')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X