在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()
输出: