2012-08-28 9 views
19

Estoy utilizando el módulo de registro de Python como:Cambio de registro 'basicConfig' que ya está establecido

import logging, sys 
logger= logging.getLogger(__file__) 
logging.basicConfig(stream = sys.stderr, level=logging.DEBUG, format='%(filename)s:%(lineno)s %(levelname)s:%(message)s') 
logger.debug("Hello World") 

Ahora, después de haber establecido la configuración básica de line 3, quiero tener un argumento de línea de comandos que puede cambiar la secuencia de salida de sys.stderr a un archivo.

He leído el documento y dice que si ambos filename y stream están presentes al mismo tiempo, el stream se ignora.

Ahora, quiero saber cómo cambiar la secuencia de un archivo después de que ya he hecho la cosa basicConfig en line 3?

Respuesta

33

Si observa las fuentes de Python para logging/__init__.py, verá que basicConfig() establece los controladores en el objeto del registrador de raíz llamando al addHandler(). Si desea comenzar desde cero, puede eliminar todos los controladores existentes y luego llamar de nuevo al basicConfig().

# Example to remove all root logger handlers and reconfigure. (UNTESTED) 
import logging 

# Remove all handlers associated with the root logger object. 
for handler in logging.root.handlers[:]: 
    logging.root.removeHandler(handler) 

# Reconfigure logging again, this time with a file. 
logging.basicConfig(filename = 'myfile.log', level=logging.DEBUG, format='%(filename)s:%(lineno)s %(levelname)s:%(message)s') 
+1

Además, la lista de uso comprensión eliminar todos los manipuladores de aquí al igual que el siguiente código sería más sencillo :) '[logging.root.removeHandler (manejador) de manipulador en logging.root.handlers [:]]' –

+7

@ Las comprensiones de la lista KevinGuan son para construir listas. Cuando desee ejecutar una instrucción en un bucle, use un bucle. – augurar

Cuestiones relacionadas