¿Cómo registro una excepción en el nivel de advertencia o información con el rastreo utilizando el marco de registro de python?

Usando algo como esto:

try: # Something... except Exception as excep: logger = logging.getLogger("component") logger.warning("something raised an exception: " + excep) logger.info("something raised an exception: " + excep) 

Preferiría no tenerlo en la causa del nivel de error en mi caso especial, no es un error.

De la documentación de registro :

Hay tres argumentos de palabras clave en kwargs que se inspeccionan: exc_info , stack_info y extra .

Si exc_info no se evalúa como falso, hace que se agregue información de excepción al mensaje de registro. Si se proporciona una tupla de excepción (en el formato devuelto por sys.exc_info() ) o una instancia de excepción, se utiliza; de lo contrario, se llama a sys.exc_info() para obtener la información de la excepción.

Así que hazlo:

 logger.warning("something raised an exception:", exc_info=True) 

Aquí hay uno que funciona (python 2.6.5).

 logger.critical("caught exception, traceback =", exc_info=True) 

Puedes probar esto:

 from logging import getLogger logger = getLogger('warn') try: # Somethings that is wrong. except Exception as exp: logger.warn("something raised an exception: " , exc_info=True) logger.warn("something raised an exception: {}".format(exp)) # another way 

En algunos casos, es posible que desee utilizar la biblioteca de advertencias . Puede tener un control muy preciso sobre cómo se muestran sus advertencias.

Pude mostrar los mensajes de registro en un bloque de excepción con el siguiente fragmento de código:

 # basicConfig have to be the first statement logging.basicConfig(level=logging.INFO) logger = logging.getLogger("componet") try: raise BaseException except BaseException: logger.warning("something raised an exception: ",exc_info=True) logger.info("something raised an exception: " ,exc_info=True) 

Trate de usar Logger.exception .

Logger.exception () crea un mensaje de registro similar a Logger.error (). La diferencia es que Logger.exception () vuelca un seguimiento de stack junto con él. Llame a este método solo desde un controlador de excepciones.

Utilice Logger.exception() .

 try: #Something... except BaseException, excep: logger = logging.getLogger("component") logger.exception("something raised an exception")