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

以上这篇python 使用装饰器并记录log的示例代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Python装饰器用法实例总结

    本文实例讲述了Python装饰器用法.分享给大家供大家参考,具体如下: 一.装饰器是什么 python的装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象.简单的说装饰器就是一个用来返回函数的函数. 它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓存.权限校验等场景.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用. 概括的讲,装饰器的作用就是为已经

  • Python中装饰器高级用法详解

    在Python中,装饰器一般用来修饰函数,实现公共功能,达到代码复用的目的.在函数定义前加上@xxxx,然后函数就注入了某些行为,很神奇!然而,这只是语法糖而已. 场景 假设,有一些工作函数,用来对数据做不同的处理: def work_bar(data): pass def work_foo(data): pass 我们想在函数调用前/后输出日志,怎么办? 傻瓜解法 logging.info('begin call work_bar') work_bar(1) logging.info('cal

  • Python 带有参数的装饰器实例代码详解

    demo.py(装饰器,带参数的装饰器): def set_level(level_num): def set_func(func): def call_func(*args, **kwargs): if level_num == 1: print("----权限级别1,验证----") elif level_num == 2: print("----权限级别2,验证----") return func() return call_func return set_f

  • python实现log日志的示例代码

    源代码: # coding=utf-8 import logging import os import time LEVELS={'debug':logging.DEBUG,\ 'info':logging.INFO,\ 'warning':logging.WARNING,\ 'error':logging.ERROR,\ 'critical':logging.CRITICAL,} logger=logging.getLogger() level='default' def createFile

  • Python 装饰器使用详解

    装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象. 经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓存.权限校验等场景.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用. 先来看一个简单例子: def now(): print('2017_7_29') 现在有一个新的需求,希望可以记录下函数的执行日志,于是在代码中添加日志代码: def now():

  • Python装饰器使用示例及实际应用例子

    测试1 deco运行,但myfunc并没有运行 复制代码 代码如下: def deco(func):     print 'before func'     return func def myfunc():     print 'myfunc() called'   myfunc = deco(myfunc) 测试2 需要的deco中调用myfunc,这样才可以执行 复制代码 代码如下: def deco(func):     print 'before func'     func()   

  • python使用装饰器作日志处理的方法

    装饰器这东西我看了一会儿才明白,在函数外面套了一层函数,感觉和java里的aop功能很像:写了2个装饰器日志的例子, 第一个是不带参数的装饰器用法示例,功能相当于给函数包了层异常处理,第二个是带参数的装饰器用法示例,将日志输出到文件. ``` #coding=utf8 import traceback import logging from logging.handlers import TimedRotatingFileHandler def logger(func): def inner(*

  • 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(lo

  • Python @property装饰器原理解析

    这篇文章主要介绍了Python @property装饰器原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.通过@property装饰器,可以直接通过方法名来访问方法,不需要在方法名后添加一对"()"小括号. class Person: def __init__(self, name): self.__name = name @property def say(self): return self.__name xioabai

  • Python 函数装饰器详解

    目录 使用场景 授权(Authorization) 日志(Logging) 带参数的装饰器 在函数中嵌入装饰器 装饰器类 总结 装饰器(Decorators)是 Python 的一个重要部分.简单地说:他们是修改其他函数的功能的函数.他们有助于让我们的代码更简短,也更Pythonic(Python范儿).大多数初学者不知道在哪儿使用它们,所以我将要分享下,哪些区域里装饰器可以让你的代码更简洁.首先,让我们讨论下如何写你自己的装饰器. 这可能是最难掌握的概念之一.我们会每次只讨论一个步骤,这样你能

  • 老生常谈Python之装饰器、迭代器和生成器

    在学习python的时候,三大"名器"对没有其他语言编程经验的人来说,应该算是一个小难点,本次博客就博主自己对装饰器.迭代器和生成器理解进行解释. 为什么要使用装饰器 什么是装饰器?"装饰"从字面意思来谁就是对特定的建筑物内按照一定的思路和风格进行美化的一种行为,所谓"器"就是工具,对于python来说装饰器就是能够在不修改原始的代码情况下给其添加新的功能,比如一款软件上线之后,我们需要在不修改源代码和不修改被调用的方式的情况下还能为期添加新的功

  • Python多层装饰器用法实例分析

    本文实例讲述了Python多层装饰器用法.分享给大家供大家参考,具体如下: 前言 Python 的装饰器能够在不破坏函数原本结构的基础上,对函数的功能进行补充.当我们需要对一个函数补充不同的功能,可能需要用到多层的装饰器.在我的使用过程中,遇到了两种装饰器层叠的情况,这里把这两种情况写下来,作为踩坑记录. 情况1 def A(funC): def decorated_C(funE): def decorated_E_by_CA(*args, **kwargs): out = funC(funE)

  • Python函数装饰器原理与用法详解

    本文实例讲述了Python函数装饰器原理与用法.分享给大家供大家参考,具体如下: 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓存.权限校验等应用场景.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用.概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能. 严格来说,装饰器只是语法糖,

  • Python自定义装饰器原理与用法实例分析

    本文实例讲述了Python自定义装饰器原理与用法.分享给大家供大家参考,具体如下: 什么是装饰器?装饰器本质是一个函数,它可以在不改变原来的函数的基础上额外的增加一些功能.如常见的@classmethod,@staticmethod等都是装饰器,接下来记录下如何自定义个装饰器: 刚刚说过了,装饰器的本质就是一个函数,所有想要自定义一个装饰器,首先自定义一个函数 def decorate(func): def wrapper(*args,**kwargs): print("定义一个装饰器"

  • python重试装饰器的简单实现方法

    简单实现了一个在函数执行出现异常时自动重试的装饰器,支持控制最多重试次数,每次重试间隔,每次重试间隔时间递增. 最新的代码可以访问从github上获取 https://github.com/blackmatrix7/matrix-toolkit/blob/master/toolkit/retry.py #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2017/8/18 上午9:50 # @Author : Matrix # @Git

  • 如何实现一个python函数装饰器(Decorator)

    装饰器本质上是一个 Python 函数或类,它可以让其他函数或类在不需要做任何代码修改的前提下增加额外功能,装饰器的返回值也是一个函数/类对象.它经常用于为已有函数/类添加记录日志.计时统计.性能测试等. 首先定义一个倒计时函数,这个函数的功能非常简单,就是把n从当前值减少到0. def countdown(n): while n > 0: print('time' + str(n)) n -= 1 print(countdown.__name__) 程序输出: countdown 1.为函数增

  • Python中装饰器的基本功能理解

    目录 前言 什么是装饰器 Python 函数的基本特性 函数名的本质: 将函数作为变量使用: 进一步实现装饰器 使用Python装饰器语句: 总结 前言 在 python 中,装饰器由于是 python 语言自带的一个功能,因此,对于其实现以及其用法就会感到比较奇怪,这里我记录一下对它的理解,加深自己的印象. 什么是装饰器 对于什么是装饰器,我们其实应该知道为什么会存在装饰器. ​ 装饰器是 python 引入的一个非常有意思的功能,它主要用于解决想要在原有函数或类的基础上进行功能扩展,但又不会

随机推荐