logging封装装饰器

先搞个log_decorator.py里面2个函数,简单说明一下_logger()是封装logger的、exception_logger()是抛出logger的异常的装饰器
log_decorator.py

import logging
import functools


def _logger():
	logger = logging.getLogger(__name__)
    logger.setLevel(logging.INFO)
    fh = logging.StreamHandler()
    #fh = logging.FileHandler("exception.log")
    fmt = "[%(asctime)s][%(filename)s:%(lineno)d][%(levelname)s] - %(message)s"
    formatter = logging.Formatter(fmt)
    fh.setFormatter(formatter)
    logger.addHandler(fh)
    return logger


def exception_logger(logger):
    """
    A decorator that wraps the passed in function and logs
    exceptions should one occur

    @param logger: The logging object
    """

    def decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            try:
                return func(*args, **kwargs)
            except:
                # log the exception
                err = "There was an exception in  "
                err += func.__name__
                logger.exception(err)

            # re-raise the exception
                raise

        return wrapper

    return decorator


guns.py

from log_decorator import _logger, exception_logger

logger = _logger()

@exception_logger(logger)
def main():
    logger.info('不能太好用!')

这样我们的main()函数就使用了装饰器@exception_logger当main函数出现异常的时候会抛出异常到装饰器,且我们可使用封装好的logger打印日志简单便捷还高级

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
loggingPython内置模块,用于记录日志信息。下面是一个简单的logging封装使用示例: ```python import logging class Logger: def __init__(self, name='my_logger', level='INFO', log_file=None): self.logger = logging.getLogger(name) self.logger.setLevel(logging.getLevelName(level)) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') if log_file: file_handler = logging.FileHandler(log_file) file_handler.setFormatter(formatter) self.logger.addHandler(file_handler) else: stream_handler = logging.StreamHandler() stream_handler.setFormatter(formatter) self.logger.addHandler(stream_handler) def debug(self, msg): self.logger.debug(msg) def info(self, msg): self.logger.info(msg) def warning(self, msg): self.logger.warning(msg) def error(self, msg): self.logger.error(msg) def critical(self, msg): self.logger.critical(msg) ``` 上面的代码定义了一个Logger类,可以用来记录不同级别的日志信息。使用示例如下: ```python logger = Logger(name='my_logger', level='DEBUG', log_file='my.log') logger.debug('debug message') logger.info('info message') logger.warning('warning message') logger.error('error message') logger.critical('critical message') ``` 在以上示例中,我们创建了一个名为my_loggerLogger实例,设置了日志级别为DEBUG,并将日志记录到文件my.log中。如果没有指定log_file,则日志将打印到控制台。我们还定义了5个方法,分别用于打印不同级别的日志信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值