Crear un decorador de registro de excepciones en Python

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:

logging-decorator-python

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *