📜  在Python中创建异常日志装饰器

📅  最后修改于: 2022-05-13 01:55:43.770000             🧑  作者: Mango

在Python中创建异常日志装饰器

先决条件: Python中的装饰器, Python中的日志记录

日志记录可帮助您跟踪您运行的程序/应用程序。它存储您想要存储的任何输出/错误/消息/异常。程序执行可以在代码运行期间借助打印语句进行调试。但是代码并不优雅,也不是一个好习惯。日志记录是应用程序遵循的标准流程,用于将流程存储在日志文件中,这将有助于在未来/意外情况下进行分析/调试。

记录异常

对于记录器,我们有不同级别的消息记录。由于本文仅限于异常日志记录,我们将使用“INFO”级别的日志消息来帮助我们检查代码是否按预期工作。如果有异常,它将使用记录器对象 logger.exception(“some exception raise”) 将异常存储到日志文件中

下面是实现。

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()   

输出:

日志装饰器-python