Requisitos previos: decoradores en Python , iniciar sesión en Python
El registro le ayuda a realizar un seguimiento del programa/aplicación que ejecuta. Almacena las salidas/errores/mensajes/excepciones cualquier cosa que desee almacenar. Las ejecuciones del programa se pueden depurar con la ayuda de declaraciones de impresión durante el tiempo de ejecución del código. Pero el código no es elegante y no es una buena práctica. El registro es un proceso estándar que una aplicación debe seguir para almacenar el proceso en un archivo de registro que ayudaría a analizar/depurar en el futuro/situaciones inesperadas.
Registro de excepciones
Para un registrador, tenemos diferentes niveles de registro de un mensaje. Como el artículo se limita al registro de excepciones, iremos con el mensaje de registro de nivel ‘INFO’ que nos ayuda a verificar si el código funciona como se esperaba. Si hay una excepción, almacenará la excepción en el archivo de registro utilizando el objeto registrador logger.exception («alguna excepción generada»).
A continuación se muestra la implementación.
import logging from functools import wraps def create_logger(): #create a logger object logger = logging.getLogger('exc_logger') logger.setLevel(logging.INFO) #create a file to store all the # logged exceptions logfile = logging.FileHandler('exc_logger.log') fmt = '%(asctime)s - %(name)s - %(levelname)s - %(message)s' formatter = logging.Formatter(fmt) logfile.setFormatter(formatter) logger.addHandler(logfile) return logger logger = create_logger() # you will find a log file # created in a given path print(logger) def exception(logger): # logger is the logging object # exception is the decorator objects # that logs every exception into log file def decorator(func): @wraps(func) def wrapper(*args, **kwargs): try: return func(*args, **kwargs) except: issue = "exception in "+func.__name__+"\n" issue = issue+"-------------------------\ ------------------------------------------------\n" logger.exception(issue) raise return wrapper return decorator @exception(logger) def divideStrByInt(): return "krishna"/7 # Driver Code if __name__ == '__main__': divideStrByInt()
Producción:
Publicación traducida automáticamente
Artículo escrito por krishna krish y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA