Al usar systemd para manejar al bot el método trace pierde su utilidad y solo permite loggear eventos de nivel info. Propongo sustituirlo por " self.logger.info" o si fuera necesario en otros puntos del bot por " self.logger.debug", etc.
Por otro lado propongo cambiar el formato de los mensajes del log y usar el formato %-style en lugar del formato con f-strings
Es cierto que de todas las interpolaciones de variables, el formato con f-strings es el más rápido, pero usar %-style tiene una importante ventaja: la interpolación no se hace en el momento de llamar a la función, sino que los valores se pasan con parámetros a la función y la interpolación se hace en la profundidad del módulo logging. Esto produce que un error en los parámetros de llamada nunca generen error en el programa (y de hecho no se pueden capturar). Un error al loggear no va a levantar una excepción, a fin de cuentas logging debería ser algo secundario que registra cosas pero no algo que pueda parar el programa.
@euribates si no me crees prueba con este código:
import logging
import time
logging.basicConfig(handlers=[logging.NullHandler()])
class Bar:
def __str__(self):
raise Exception()
foo = Bar()
try:
logging.warning('Algo: {}'.format(foo))
except Exception:
print('Genera excepción 1')
time.sleep(1)
try:
logging.warning(f'Algo: {foo}')
except Exception:
print('Genera excepción 2')
time.sleep(1)
try:
logging.warning('Algo: %s', foo)
except Exception:
print('Genera excepción 3')
finally:
print('¿Qué pasó?')
Al usar systemd para manejar al bot el método trace pierde su utilidad y solo permite loggear eventos de nivel info. Propongo sustituirlo por " self.logger.info" o si fuera necesario en otros puntos del bot por " self.logger.debug", etc.
Por otro lado propongo cambiar el formato de los mensajes del log y usar el formato %-style en lugar del formato con f-strings
Es cierto que de todas las interpolaciones de variables, el formato con f-strings es el más rápido, pero usar %-style tiene una importante ventaja: la interpolación no se hace en el momento de llamar a la función, sino que los valores se pasan con parámetros a la función y la interpolación se hace en la profundidad del módulo logging. Esto produce que un error en los parámetros de llamada nunca generen error en el programa (y de hecho no se pueden capturar). Un error al loggear no va a levantar una excepción, a fin de cuentas logging debería ser algo secundario que registra cosas pero no algo que pueda parar el programa.
@euribates si no me crees prueba con este código: