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判断文本中消息重复次数的方法
Apr 27 Python
Python实现定时任务
Feb 08 Python
python绘制简单折线图代码示例
Dec 19 Python
Python绘制七段数码管实例代码
Dec 20 Python
python实现按行分割文件
Jul 22 Python
Python Django 实现简单注册功能过程详解
Jul 29 Python
Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例
Sep 29 Python
Python3列表List入门知识附实例
Feb 09 Python
Python 窗体(tkinter)下拉列表框(Combobox)实例
Mar 04 Python
Django ModelForm操作及验证方式
Mar 30 Python
tensorflow使用CNN分析mnist手写体数字数据集
Jun 17 Python
python打开文件的方式有哪些
Jun 29 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+MySQL的聊天室设计
2006/10/09 PHP
浅谈php错误提示及查错方法
2015/07/14 PHP
php模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)
2017/06/11 PHP
thinkphp分页集成实例
2017/07/24 PHP
PHP弱类型语言中类型判断操作实例详解
2017/08/10 PHP
PHP 超级全局变量相关总结
2020/06/30 PHP
使用js 设置url参数
2013/07/08 Javascript
快速解决jQuery与其他库冲突的方法介绍
2014/01/02 Javascript
JavaScript闭包实例讲解
2014/04/22 Javascript
基于JS实现的倒计时程序实例
2015/07/24 Javascript
JS实现简单的二元方程计算器功能示例
2017/01/03 Javascript
微信小程序教程系列之新建页面(4)
2017/04/17 Javascript
JavaScript队列函数和异步执行详解
2017/06/19 Javascript
layer.js open 隐藏滚动条的例子
2019/09/05 Javascript
解决Layui中templet中a的onclick参数传递的问题
2019/09/20 Javascript
vue 全局环境切换问题
2019/10/27 Javascript
vue 实现用户登录方式的切换功能
2020/04/14 Javascript
python使用any判断一个对象是否为空的方法
2014/11/19 Python
Python实现的rsa加密算法详解
2018/01/24 Python
python实现键盘控制鼠标移动
2020/11/27 Python
Jupyter notebook 启动闪退问题的解决
2020/04/13 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
2020/04/22 Python
Python xlrd模块导入过程及常用操作
2020/06/10 Python
PyTorch: Softmax多分类实战操作
2020/07/07 Python
Python Socket多线程并发原理及实现
2020/12/11 Python
Html5实现单张、多张图片上传功能
2019/04/28 HTML / CSS
AmazeUI在模态框中嵌入表单形成模态输入框
2020/08/20 HTML / CSS
跑鞋、网球鞋、网球拍、服装及装备:Holabird Sports
2016/09/19 全球购物
美国眼镜网站:EyeBuyDirect
2017/04/13 全球购物
教师师德教育的自我评价
2013/10/31 职场文书
公益广告语集锦
2014/03/13 职场文书
大二学年个人总结
2015/03/03 职场文书
初中美术教学反思
2016/02/17 职场文书
2016年春季趣味运动会开幕词
2016/03/04 职场文书
高中优秀作文(范文)
2019/08/15 职场文书
关于springboot配置druid数据源不生效问题(踩坑记)
2021/09/25 Java/Android