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 切片和range()用法说明
Mar 24 Python
Python实现读取txt文件并画三维图简单代码示例
Dec 09 Python
Python实现快速计算词频功能示例
Jun 25 Python
使用pandas批量处理矢量化字符串的实例讲解
Jul 10 Python
详解Python3除法之真除法、截断除法和下取整对比
May 23 Python
Python Web程序搭建简单的Web服务器
Jul 31 Python
如何基于python测量代码运行时间
Dec 25 Python
Python SMTP配置参数并发送邮件
Jun 16 Python
Python return语句如何实现结果返回调用
Oct 15 Python
pycharm 关闭search everywhere的解决操作
Jan 15 Python
python 爬取哔哩哔哩up主信息和投稿视频
Jun 07 Python
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
Jun 11 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
通过文字传递创建的图形按钮
2006/10/09 PHP
Linux平台PHP5.4设置FPM线程数量的方法
2016/11/09 PHP
通过百度地图获取公交线路的站点坐标的js代码
2012/05/11 Javascript
如何学习Javascript入门指导
2013/11/01 Javascript
jquery 使用简明教程
2014/03/05 Javascript
jquery实现点击弹出带标题栏的弹出层(从右上角飞入)效果
2015/09/19 Javascript
深入学习AngularJS中数据的双向绑定机制
2016/03/04 Javascript
AngularJS入门教程之过滤器详解
2016/08/19 Javascript
jQuery表单验证简单示例
2016/10/17 Javascript
JS正则表达式完美实现身份证校验功能
2017/10/18 Javascript
基于vue2.0实现仿百度前端分页效果附实现代码
2018/10/30 Javascript
JavaScript禁用右键单击优缺点分析
2019/01/20 Javascript
node.JS事件机制与events事件模块的使用方法详解
2020/02/06 Javascript
node+multer实现图片上传的示例代码
2020/02/18 Javascript
JavaScript实现随机点名器
2020/03/25 Javascript
如何解决vue在ios微信"复制链接"功能问题
2020/03/26 Javascript
Python对列表中的各项进行关联详解
2017/08/15 Python
Python实现希尔排序算法的原理与用法实例分析
2017/11/23 Python
python实现Flappy Bird源码
2018/12/24 Python
python实现多张图片拼接成大图
2019/01/15 Python
在pycharm中设置显示行数的方法
2019/01/16 Python
Python简单I/O操作示例
2019/03/18 Python
python卸载后再次安装遇到的问题解决
2019/07/10 Python
python模拟鼠标点击和键盘输入的操作
2019/08/04 Python
Django models filter筛选条件详解
2020/03/16 Python
Scrapy项目实战之爬取某社区用户详情
2020/09/17 Python
基于OpenCV的网络实时视频流传输的实现
2020/11/15 Python
碧欧泉美国官网:Biotherm美国
2016/08/31 全球购物
信息与计算科学专业推荐信
2014/02/23 职场文书
工程项目建议书范文
2014/03/12 职场文书
技术比武方案
2014/05/19 职场文书
离婚上诉状范文
2015/05/23 职场文书
关爱留守儿童主题班会
2015/08/13 职场文书
使用numpy nonzero 找出非0元素
2021/05/14 Python
教你使用TensorFlow2识别验证码
2021/06/11 Python
了解Redis常见应用场景
2021/06/23 Redis