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 相关文章推荐
使用Pyrex来扩展和加速Python程序的教程
Apr 13 Python
在Django的模型中添加自定义方法的示例
Jul 21 Python
python3 读写文件换行符的方法
Apr 09 Python
pandas 数据实现行间计算的方法
Jun 08 Python
Python实现全排列的打印
Aug 18 Python
Python Matplotlib 基于networkx画关系网络图
Jul 10 Python
OpenCV+Python--RGB转HSI的实现
Nov 27 Python
Python 爬取必应壁纸的实例讲解
Feb 24 Python
完美解决ARIMA模型中plot_acf画不出图的问题
Jun 04 Python
基于python实现模拟数据结构模型
Jun 12 Python
Python3 pyecharts生成Html文件柱状图及折线图代码实例
Sep 29 Python
python Xpath语法的使用
Nov 26 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
PHP4实际应用经验篇(8)
2006/10/09 PHP
TNC vs BOOM BO3 第一场2.13
2021/03/10 DOTA
Javascript学习笔记-详解in运算符
2011/09/13 Javascript
Extjs中的GridPanel隐藏列会显示在menuDisabled中解决方法
2013/01/27 Javascript
子窗体与父窗体传值示例js代码
2013/08/01 Javascript
Javascript中String的常用方法实例分析
2015/06/13 Javascript
解决jQuery使用JSONP时产生的错误
2015/12/02 Javascript
利用BootStrap的Carousel.js实现轮播图动画效果
2016/12/21 Javascript
nodejs 搭建简易服务器的图文教程(推荐)
2017/07/18 NodeJs
实现两个文本框同时输入的实例
2017/09/25 Javascript
解决iView中时间控件选择的时间总是少一天的问题
2018/03/15 Javascript
对angular2中的ngfor和ngif指令嵌套实例讲解
2018/09/12 Javascript
vue-router懒加载速度缓慢问题及解决方法
2018/11/25 Javascript
解决Vue开发中对话框被遮罩层挡住的问题
2018/11/26 Javascript
vue在自定义组件中使用v-model进行数据绑定的方法
2019/03/25 Javascript
vue element upload实现图片本地预览
2019/08/20 Javascript
在微信小程序中使用mqtt服务的方法
2019/12/13 Javascript
[03:55]DOTA2完美大师赛选手传记——LFY.MONET
2017/11/18 DOTA
Python入门篇之编程习惯与特点
2014/10/17 Python
python定时执行指定函数的方法
2015/05/27 Python
使用Python来开发Markdown脚本扩展的实例分享
2016/03/04 Python
python使用TensorFlow进行图像处理的方法
2018/02/28 Python
python实现电子词典
2020/03/03 Python
详解Python 循环嵌套
2020/07/09 Python
CSS3 圆角效果
2009/07/15 HTML / CSS
CSS3的常见transformation图形变化用法小结
2016/05/13 HTML / CSS
HTML5教程之html 5 本地数据库(Web Sql Database)
2014/04/03 HTML / CSS
HTML5页面音视频在微信和app下自动播放的实现方法
2016/10/20 HTML / CSS
期中考试后的反思
2014/02/08 职场文书
经济管理毕业生求职信
2014/03/15 职场文书
倡导文明标语
2014/06/16 职场文书
应届生简历自我评价
2015/03/11 职场文书
2015年外联部工作总结
2015/04/03 职场文书
院系推荐意见
2015/06/05 职场文书
八年级作文之友情
2019/11/25 职场文书
PostgreSQL怎么创建分区表详解
2022/06/25 PostgreSQL