python 使用装饰器并记录log的示例代码


Posted in Python onJuly 12, 2019

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的示例代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用python加密自己的密码
Aug 04 Python
详解Python验证码识别
Jan 25 Python
Python中的连接符(+、+=)示例详解
Jan 13 Python
开源软件包和环境管理系统Anaconda的安装使用
Sep 04 Python
python使用for循环计算0-100的整数的和方法
Feb 01 Python
Python3实现的旋转矩阵图像算法示例
Apr 03 Python
python正则表达式匹配IP代码实例
Dec 28 Python
selenium+python配置chrome浏览器的选项的实现
Mar 18 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
Apr 27 Python
tensorflow转换ckpt为savermodel模型的实现
May 25 Python
Python常驻任务实现接收外界参数代码解析
Jul 21 Python
Python+Tkinter打造签名设计工具
Apr 01 Python
如何使用python爬虫爬取要登陆的网站
Jul 12 #Python
Pycharm使用之设置代码字体大小和颜色主题的教程
Jul 12 #Python
python增加图像对比度的方法
Jul 12 #Python
Python 控制终端输出文字的实例
Jul 12 #Python
在Django的View中使用asyncio的方法
Jul 12 #Python
检测python爬虫时是否代理ip伪装成功的方法
Jul 12 #Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
Jul 11 #Python
You might like
PHP永久登录、记住我功能实现方法和安全做法
2015/04/27 PHP
php通过前序遍历树实现无需递归的无限极分类
2015/07/10 PHP
详解PHP原生DOM对象操作XML的方法
2016/10/17 PHP
Laravel validate error处理,ajax,json示例
2019/10/25 PHP
基于PHP+Mysql简单实现了图书购物车系统的实例详解
2020/08/06 PHP
用Laravel轻松处理千万级数据的方法实现
2020/12/25 PHP
javascript学习笔记(七)利用javascript来创建和存储cookie
2011/04/08 Javascript
JS与C#编码解码
2013/12/03 Javascript
js设置控件的隐藏与显示的两种方法
2014/08/21 Javascript
JQuery 使用attr方法实现下拉列表选中
2014/10/13 Javascript
Clipboard.js 无需Flash的JavaScript复制粘贴库
2015/10/02 Javascript
jQuery模拟淘宝购物车功能
2017/02/27 Javascript
详解vue-cli + webpack 多页面实例应用
2017/04/25 Javascript
JS全角与半角转化实例(分享)
2017/07/04 Javascript
webpack-dev-server自动更新页面方法
2018/02/22 Javascript
vue中的mescroll搜索运用及各种填坑处理
2019/10/30 Javascript
解决vue使用vant下拉框van-dropdown-item 绑定title值不变问题
2020/08/05 Javascript
Python多线程编程(七):使用Condition实现复杂同步
2015/04/05 Python
python logging 日志轮转文件不删除问题的解决方法
2016/08/02 Python
Python中运算符"=="和"is"的详解
2016/10/08 Python
Python数据结构与算法之二叉树结构定义与遍历方法详解
2017/12/12 Python
django之跨表查询及添加记录的示例代码
2018/10/16 Python
python后端接收前端回传的文件方法
2019/01/02 Python
python实现函数极小值
2019/07/10 Python
pywinauto自动化操作记事本
2019/08/26 Python
python groupby 函数 as_index详解
2019/12/16 Python
python脚本后台执行方式
2019/12/21 Python
Python实现随机生成任意数量车牌号
2020/01/21 Python
Sam’s Club山姆会员商店:沃尔玛旗下高端会员制商店
2017/01/16 全球购物
美国著名手表网站:Timepiece
2017/11/15 全球购物
铁路安全事故反思
2014/04/26 职场文书
厨师长岗位职责范本
2014/08/25 职场文书
高三复习计划
2015/01/19 职场文书
导游欢迎词范文
2015/01/23 职场文书
2015年中职班主任工作总结
2015/05/25 职场文书
2016年小学生迎国庆广播稿
2015/12/18 职场文书