Python logging模块进行封装实现原理解析


Posted in Python onAugust 07, 2020

1. 简介

      追踪某些软件运行时所发生事件的方法, 可以在代码中调用日志中某些方法来记录发生的事情

一个事件可以用一个可包含可选变量数据的消息来描述

事件有自己的重要性等级

2. 使用logging日志系统四大组件

  • loggers日志器
    • 提供应用程序代码直接使用的接口
  • handlers处理器
    • 用于将日志记录发送到指定的目的位置
  • filters过滤器
    • 过滤, 决定哪些输出哪些日志记录, 其余忽略
  • formatters格式器
    • 控制日志输出格式

使用代码如下

import os, time, logging, sys
from Common.plugs.get_config import r_config

BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
if sys.platform == "win32":
  ENV_CONF_DIR = os.path.join(BASE_DIR, 'Common/conf/env_config.ini').replace('/', '\\')
else:
  ENV_CONF_DIR = os.path.join(BASE_DIR, 'Common/conf/env_config.ini')
log_path = r_config(ENV_CONF_DIR, "log", "log_path")


class Log:

  def __init__(self, log_path):
    self.logName = os.path.join(log_path, '{0}.log'.format(time.strftime('%Y-%m-%d')))

  def console_log(self, level, message):
    # 创建一个logger
    logger = logging.getLogger()
    logger.setLevel(logging.DEBUG)

    # 创建一个handler,用于 debug 写入日志文件
    debug_file = logging.FileHandler(self.logName, 'a+', encoding='utf-8')
    debug_file.setLevel(logging.DEBUG)

    # 再创建一个handler,用于输出到控制台
    ch = logging.StreamHandler()
    ch.setLevel(logging.DEBUG)

    # 定义handler的输出格式

    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

    debug_file.setFormatter(formatter)
    ch.setFormatter(formatter)

    # 给logger添加handler
    logger.addHandler(debug_file)
    logger.addHandler(ch)

    # 记录一条日志
    if level == 'info':
      logger.info(message)
    elif level == 'debug':
      logger.debug(message)
    elif level == 'warning':
      logger.warning(message)
    elif level == 'error':
      logger.error(message)

    elif level == 'critical':
      logger.critical(message)

    logger.removeHandler(ch)
    logger.removeHandler(debug_file)
    debug_file.close()

  def debug(self, message): #最详细日志信息, 多用于问题诊断
    self.console_log('debug', message)

  def info(self, message): #仅次于DEBUG, 多用于记录关键点信息, 确保程序按预期执行
    self.console_log('info', message)

  def warning(self, message): #低等级故障, 但程序仍能运行, 如磁盘空间不足警告
    self.console_log('warning', message)

  def error(self, message): #由于比WARNING严重的问题, 导致某些功能不能正常运行时的记录
    self.console_log('error', message)

  def critical(self, message): 严重错误, 导致应用程序不能继续运行时的记录
    self.console_log('critical', message)


if __name__ == '__main__':
  Log(log_path).info("adasd")
  Log(log_path).error("dsadasddasd")
'''

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python client使用http post 到server端的代码
Feb 10 Python
Python编写电话薄实现增删改查功能
May 07 Python
Django 浅谈根据配置生成SQL语句的问题
May 29 Python
对Python中Iterator和Iterable的区别详解
Oct 18 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
Feb 01 Python
python selenium执行所有测试用例并生成报告的方法
Feb 13 Python
Tensorflow实现神经网络拟合线性回归
Jul 19 Python
python元组的概念知识点
Nov 19 Python
Pytorch 实现权重初始化
Dec 31 Python
Python基于QQ邮箱实现SSL发送
Apr 26 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
May 26 Python
Python常用外部指令执行代码实例
Nov 05 Python
Python定时任务APScheduler安装及使用解析
Aug 07 #Python
Python如何解除一个装饰器
Aug 07 #Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
Aug 07 #Python
Python实现上下文管理器的方法
Aug 07 #Python
Python 读取位于包中的数据文件
Aug 07 #Python
Python如何绘制日历图和热力图
Aug 07 #Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
Aug 07 #Python
You might like
在PHP3中实现SESSION的功能(二)
2006/10/09 PHP
php setcookie函数的参数说明及其用法
2014/04/20 PHP
PHP实现将textarea的值根据回车换行拆分至数组
2015/06/10 PHP
Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解
2016/03/07 PHP
PHP使用phpunit进行单元测试示例
2019/09/23 PHP
滚动图片效果 jquery实现回旋滚动效果
2013/01/08 Javascript
Jquery 动态生成表格示例代码
2013/12/24 Javascript
textarea焦点的用法实现获取焦点清空失去焦点提示效果
2014/05/19 Javascript
js如何判断用户是否是用微信浏览器
2014/06/05 Javascript
javascript中Math.random()使用详解
2015/04/15 Javascript
javascript实现别踩白块儿小游戏程序
2015/11/22 Javascript
Nodejs 发送Post请求功能(发短信验证码例子)
2017/02/09 NodeJs
JavaScript实现旋转轮播图
2020/08/18 Javascript
Vue上传组件vue Simple Uploader的用法示例
2017/08/25 Javascript
Redux 和 Mobx的选择问题:让你不再困惑!
2017/09/18 Javascript
element-ui表格数据转换的示例代码
2018/08/24 Javascript
Vue源码解析之数组变异的实现
2018/12/04 Javascript
vue 页面回退mounted函数不执行的解决方案
2020/07/26 Javascript
[01:01:41]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第二场 1月31日
2021/03/11 DOTA
Python聚类算法之DBSACN实例分析
2015/11/20 Python
windows10系统中安装python3.x+scrapy教程
2016/11/08 Python
Python动态语言与鸭子类型详解
2019/07/01 Python
python库matplotlib绘制坐标图
2019/10/18 Python
详解tensorflow2.x版本无法调用gpu的一种解决方法
2020/05/25 Python
美国杂志订阅折扣与优惠网站:Magazines.com
2016/08/31 全球购物
DERMAdoctor官网:美国著名皮肤护理品牌
2019/07/06 全球购物
英国书籍、CD、DVD和游戏的第一道德零售商:Awesome Books
2020/02/22 全球购物
Timberland俄罗斯官方网上商店:全球领先的户外品牌
2020/03/15 全球购物
易程科技软件测试笔试
2013/03/24 面试题
《小池塘》教学反思
2014/02/28 职场文书
广告学专业毕业生自荐信
2014/05/28 职场文书
学雷锋活动总结报告
2014/06/26 职场文书
村党的群众路线教育实践活动工作总结
2014/10/25 职场文书
反腐倡廉观后感
2015/06/08 职场文书
单独二胎证明
2015/06/24 职场文书
七年级生物教学反思
2016/02/20 职场文书