• python 使用装饰器并记录log


    1.首先定义一个log文件

    # -*- coding: utf-8 -*-
    import os
    import time
    import logging
    import sys
    log_dir1=os.path.join(os.path.dirname(os.path.dirname(__file__)),"logs")
    today = time.strftime('%Y%m%d', time.localtime(time.time()))
    full_path=os.path.join(log_dir1,today)
    if not os.path.exists(full_path):
        os.makedirs(full_path)
    log_path=os.path.join(full_path,"facebook.log")
    def get_logger():
         # 获取logger实例,如果参数为空则返回root logger
         logger = logging.getLogger("facebook")
         if not logger.handlers:
                # 指定logger输出格式
                formatter = logging.Formatter('%(asctime)s %(levelname)-8s: %(message)s')
    
                # 文件日志
                file_handler = logging.FileHandler(log_path,encoding="utf8")
                file_handler.setFormatter(formatter)  # 可以通过setFormatter指定输出格式
    
                # 控制台日志
                console_handler = logging.StreamHandler(sys.stdout)
                console_handler.formatter = formatter  # 也可以直接给formatter赋值
    
                # 为logger添加的日志处理器
                logger.addHandler(file_handler)
                logger.addHandler(console_handler)
    
                # 指定日志的最低输出级别,默认为WARN级别
                logger.setLevel(logging.INFO)
         #  添加下面一句,在记录日志之后移除句柄
         return  logger
    

    2.然后定义一个装饰器文件

    在这里引用wraps,一个装饰器的装饰器,目的为了保持引用进来的函数名字不发生变化

    #!/usr/bin/env python  
    # encoding: utf-8
    from functools import wraps
    from logger.log import get_logger
    import traceback
    def decoratore(func):
        @wraps(func)
        def log(*args,**kwargs):
            try:
                print("当前运行方法",func.__name__)
                return func(*args,**kwargs)
            except Exception as e:
                get_logger().error(f"{func.__name__} is error,here are details:{traceback.format_exc()}")
        return log
    

      

    3.在使用的时候直接在函数上面引用即可

    @decorator
    def start():
       print("666")
    

      

      

  • 相关阅读:
    从0系统学Android-2.6Activity间数据传递
    观察者模式详解
    从0系统学Android-2.5更多隐式Intent用法
    从 View 的四个构造方法说起
    ListView详细介绍与使用
    推荐一个程序员系统学习网址
    从 http协议角度解析okhttp
    从0系统学Android-2.4隐式Intent
    菜单布局记录篇
    轮播图记录篇
  • 原文地址:https://www.cnblogs.com/c-x-a/p/9072234.html
Copyright © 2020-2023  润新知