python 通过装饰器实现类的日志记载

import logging
from logging import FileHandler, Formatter
import os.path as fpath
from datetime import datetime
logfile = fpath.join(fpath.dirname(fpath.abspath(__file__)),datetime.now().strftime(‘%Y%m%d‘) + ‘.log‘)

formatter = ‘%(asctime)s %(levelname)-8s %(name)-15s %(funcName)s %(message)s‘
dateformatter = ‘%Y-%m-%d %H:%M:%S‘
default_level = {
    ‘critical‘: 50,
    ‘error‘: 40,
    ‘warning‘: 30,
    ‘info‘: 20,
    ‘debug‘: 10
}

def bindlog(level = ‘debug‘):
    def wrapper(cls):
        print(cls)
        logger = logging.getLogger(cls.__name__)
        logger.setLevel(default_level[level])
        file_handle = FileHandler(logfile)
        file_handle.setFormatter(Formatter(formatter, dateformatter))
        logger.addHandler(file_handle)
        def inner(*args, **kwargs):
            if not hasattr(cls, ‘log‘):
                setattr(cls, ‘log‘, logger)
            return(cls(*args, **kwargs))
        return inner
    return wrapper

@bindlog()
class Test:

    def add(self):
        for _ in range(100):

            self.log.info(‘ceshi.‘)

原文地址:https://www.cnblogs.com/alplf123/p/10303667.html

时间: 2025-01-04 01:03:27

python 通过装饰器实现类的日志记载的相关文章

【Python】装饰器实现日志记录

好的日志对一个软件的重要性是显而易见的.如果函数的入口都要写一行代码来记录日志,这种方式实在是太低效了,但一直没有找到更好的方法.后来用python写一些软件,了解到python的装饰器功能时,突然人品爆发,结合装饰器来记录日志那是绝对的简单有效! 下面简单演示一下用装饰器来协助记录Log,示例代码如下: [python] view plain copy print? #!/usr/bin/env python def trace_func(func): ''''' A decorate fun

python的装饰器

装饰器 函数即对象 在python的里,函数和我们之前的[1,2,3],'abc',8等一样都是对象,而且函数是最高级的对象(对象是类的实例化,可以调用相应的方法,函数是包含变量对象的对象). 1 def foo(): 2 print('i am the foo') 3 bar() 4 5 def bar(): 6 print('i am the bar') 7 8 foo() 9 # def bar(): #报错 10 # print('i am the bar') 带着这个问题,我们聊一聊函

【转】详解Python的装饰器

原文链接:http://python.jobbole.com/86717/ Python中的装饰器是你进入Python大门的一道坎,不管你跨不跨过去它都在那里. 为什么需要装饰器 我们假设你的程序实现了say_hello()和say_goodbye()两个函数. def say_hello(): print "hello!" def say_goodbye(): print "hello!" # bug here if __name__ == '__main__':

说说Python的装饰器模式与面向切面编程

说说Python的装饰器模式与面向切面编程 今天来讨论一下装饰器.装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用.概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能. 1. 装饰器入门 1.1. 需求是怎么来的? 装饰器的定义很是抽象,我们来看一个小例子. //edit http://www.lai18.com //date 2

〖Python〗-- 装饰器

[装饰器] 函数即对象 在python的世界里,函数和我们之前的[1,2,3],'abc',8等一样都是对象,而且函数是最高级的对象(对象是类的实例化,可以调用相应的方法,函数是包含变量对象的对象). def foo(): print('i am the foo') bar() def bar(): print('i am the bar') foo() # def bar(): #报错 # print('i am the bar') 函数在内存的存储情况:  图1 函数对象的调用仅仅比其它对象

Python札记 -- 装饰器

这几天花了点时间了解了下 Python的装饰器.其实以前在书上也看过有关的内容,不过当时不理解.今天把自己的一点体会写出来跟大家分享一下. 网上流传得比较广的,有关 python装饰器的文章有两篇,一篇是 CSDN上的,另外一篇是园子里的.附带链接如下:     http://blog.csdn.net/thy38/article/details/4471421     http://www.cnblogs.com/huxi/archive/2011/03/01/1967600.html    

Python学习---装饰器的学习1210

装饰器的基础 学习前提: 作用域 + 函数的理解 + 闭包  [学习,理解] 代码编写原则: 对修改开放对扩展开放 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值也是一个函数对象. 装饰器的应用:经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓存.权限校验等应用场景.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用. 装饰器作用:装饰器感觉就像是内部函数的

详解Python的装饰器

Python中的装饰器是你进入Python大门的一道坎,不管你跨不跨过去它都在那里. 为什么需要装饰器 我们假设你的程序实现了say_hello()和say_goodbye()两个函数. def say_hello(): print "hello!" def say_goodbye(): print "hello!" # bug here if __name__ == '__main__': say_hello() say_goodbye() 但是在实际调用中,我们

python—函数装饰器

闭包 如果在一个内部函数(函数里的函数)里,对在外部作用域(但不是在全局作用域,可以理解为外层函数)的变量进行引用,那么内部函数就被认为是闭包. 例如: def outer(): x=10 # 这里x即为外部作用域变量 def inner(): print(x) return inner # inner函数被称为一个闭包 装饰器 写python代码一定要遵循开放封闭原则.即,可扩展功能,对源代码修改是封闭的.装饰是为函数和类指定管理代码的一种方式.装饰器本身的形式是处理其他的可调用对象的可调用的