¿Cómo escribo mensajes de registro en un archivo de registro y en la consola al mismo tiempo?

¿Este código escribe tanto en un archivo de registro como en la consola al mismo tiempo?

logFile = open("logfile.log",a) print >>logFile,message logFile.close() 

No, no escribirá a los dos. print() escribirá en la consola. Una nota rápida en su código original. Supongo que define el message algún lugar, pero el código sigue siendo incorrecto. Necesita citas en torno a la a en la statement open , como esta:

 open("logfile.log", "a") 

ya que supongo que querías adjuntar al archivo. De lo contrario, el código lanza un NameError ya que a no es una variable definida.

Sin embargo, como han dicho otros, debería considerar el uso del módulo de registro . Aquí hay un ejemplo simple de cómo escribir tanto en la consola como en un archivo de registro. El código se deriva parcialmente de aquí y aquí :

 import inspect import logging def function_logger(file_level, console_level = None): function_name = inspect.stack()[1][3] logger = logging.getLogger(function_name) logger.setLevel(logging.DEBUG) #By default, logs all messages if console_level != None: ch = logging.StreamHandler() #StreamHandler logs to console ch.setLevel(console_level) ch_format = logging.Formatter('%(asctime)s - %(message)s') ch.setFormatter(ch_format) logger.addHandler(ch) fh = logging.FileHandler("{0}.log".format(function_name)) fh.setLevel(file_level) fh_format = logging.Formatter('%(asctime)s - %(lineno)d - %(levelname)-8s - %(message)s') fh.setFormatter(fh_format) logger.addHandler(fh) return logger def f1(): f1_logger = function_logger(logging.DEBUG, logging.ERROR) f1_logger.debug('debug message') f1_logger.info('info message') f1_logger.warn('warn message') f1_logger.error('error message') f1_logger.critical('critical message') def f2(): f2_logger = function_logger(logging.WARNING) f2_logger.debug('debug message') f2_logger.info('info message') f2_logger.warn('warn message') f2_logger.error('error message') f2_logger.critical('critical message') def main(): f1() f2() logging.shutdown() main() 

Dado que los objetos del registrador pueden tener más de un controlador, podemos crear múltiples controladores que escriben en diferentes lugares. En mi código, la function_logger function_logger crea un objeto de registrador específico para la función en la que se llama.

La función f1() registra los mensajes de nivel DEBUG y superior en un archivo f1.log , mientras escribe los mensajes de nivel ERROR y superior en la consola, con un formato diferente para cada uno.

Sin embargo, la función f2() no registra nada en la consola y solo registra los mensajes de nivel de WARNING en su archivo de registro f2.log . La ejecución de este script una vez produce esta salida en la consola:

 2012-07-20 10:46:38,950 - f1 - error message 2012-07-20 10:46:38,953 - f1 - critical message 

y esta salida en f1.log y f2.log , respectivamente:

f1.log :

 2012-07-20 10:46:38,950 - 26 - DEBUG - debug message 2012-07-20 10:46:38,950 - 27 - INFO - info message 2012-07-20 10:46:38,950 - 28 - WARNING - warn message 2012-07-20 10:46:38,950 - 29 - ERROR - error message 2012-07-20 10:46:38,953 - 30 - CRITICAL - critical message 

f2.log

 2012-07-20 10:46:38,960 - 36 - WARNING - warn message 2012-07-20 10:46:38,960 - 37 - ERROR - error message 2012-07-20 10:46:38,960 - 38 - CRITICAL - critical message 

No. Se escribe solo para archivo. Debe utilizar el módulo de logging . Consulte http://docs.python.org/library/logging.html