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的urllib库提交WEB表单
Feb 24 Python
Python中列表、字典、元组、集合数据结构整理
Nov 20 Python
Python for Informatics 第11章之正则表达式(二)
Apr 21 Python
Python实现计算两个时间之间相差天数的方法
May 10 Python
Django自定义分页效果
Jun 27 Python
简单了解python gevent 协程使用及作用
Jul 22 Python
python实现复制大量文件功能
Aug 31 Python
Python imread、newaxis用法详解
Nov 04 Python
浅谈Pycharm的项目文件名是红色的原因及解决方式
Jun 01 Python
Python中的全局变量如何理解
Jun 04 Python
Python Scrapy图片爬取原理及代码实例
Jun 12 Python
python利用xlsxwriter模块 操作 Excel
Oct 14 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
php XPath对XML文件查找及修改实现代码
2011/07/27 PHP
PHP IDE PHPStorm配置支持友好Laravel代码提示方法
2015/05/12 PHP
Yii清理缓存的方法
2016/01/06 PHP
根据key删除数组中指定的元素实现方法
2017/03/02 PHP
Laravel 实现密码重置功能
2018/02/23 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
利用ASP发送和接收XML数据的处理方法与代码
2007/11/13 Javascript
点图片上一页下一页翻页效果
2008/07/09 Javascript
基于jQuery的弹出消息插件 DivAlert之旅(一)
2010/04/01 Javascript
jquery实现的随机多彩tag标签随机颜色和字号大小效果
2014/03/27 Javascript
JavaScript中发布/订阅模式的简单实例
2014/11/05 Javascript
jQuery处理图片加载失败的常用方法
2015/06/08 Javascript
Jquery 全选反选实例代码
2015/11/19 Javascript
JavaScript中iframe实现局部刷新的几种方法汇总
2016/01/06 Javascript
JavaScript知识点总结(十六)之Javascript闭包(Closure)代码详解
2016/05/31 Javascript
Node.js五大应用性能技巧小结(必须收藏)
2017/08/09 Javascript
JS 数组随机洗牌的实例代码
2018/09/12 Javascript
浅析Proxy可以优化vue的数据监听机制问题及实现思路
2018/11/29 Javascript
Vue和React组件之间的传值方式详解
2019/01/31 Javascript
使用vue开发移动端管理后台的注意事项
2019/03/07 Javascript
在vue-cli 3中给stylus、sass样式传入共享的全局变量
2019/08/12 Javascript
Node.js系列之安装配置与基本使用(1)
2019/08/30 Javascript
Python基于回溯法子集树模板解决马踏棋盘问题示例
2017/09/11 Python
python修改list中所有元素类型的三种方法
2018/04/09 Python
python取数作为临时极大值(极小值)的方法
2018/10/15 Python
python的debug实用工具 pdb详解
2019/07/12 Python
浅谈Django2.0 加xadmin踩的坑
2019/11/15 Python
Django ORM 查询表中某列字段值的方法
2020/04/30 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
2020/06/01 Python
Python3爬虫关于代理池的维护详解
2020/07/30 Python
高等教育专业自荐信范文
2014/03/26 职场文书
大学生通用个人自我评价
2014/04/27 职场文书
司法所长先进事迹
2014/06/02 职场文书
中药学自荐信
2014/06/15 职场文书
毕业论文答辩演讲稿
2015/06/23 职场文书
CSS中Single Div 绘图技巧的实现
2021/06/18 HTML / CSS