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 httplib,smtplib使用方法
Sep 06 Python
浅析Python中的序列化存储的方法
Apr 28 Python
Python使用Srapy框架爬虫模拟登陆并抓取知乎内容
Jul 02 Python
Python 内置函数memoryview(obj)的具体用法
Nov 23 Python
python正则表达式之对号入座篇
Jul 24 Python
详解Python数据可视化编程 - 词云生成并保存(jieba+WordCloud)
Mar 26 Python
Python实现子类调用父类的初始化实例
Mar 12 Python
将python字符串转化成长表达式的函数eval实例
May 11 Python
Pycharm修改python路径过程图解
May 22 Python
Python3爬虫关于识别检验滑动验证码的实例
Jul 30 Python
Python爬取12306车次信息代码详解
Aug 12 Python
Python函数调用追踪实现代码
Nov 27 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
Laravel 5.3 学习笔记之 安装
2016/08/28 PHP
PHP 搜索查询功能实现
2016/11/29 PHP
PHP封装curl的调用接口及常用函数详解
2018/05/31 PHP
js活用事件触发对象动作
2008/08/10 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
jQuery EasyUI API 中文文档 - Draggable 可拖拽
2011/09/29 Javascript
jquery实现奇偶行赋值不同css值
2012/02/17 Javascript
javascript实现网页子页面遍历回调的方法(涉及 window.frames、递归函数、函数上下文)
2015/07/27 Javascript
js去字符串前后空格的实现方法
2016/02/26 Javascript
探索angularjs+requirejs全面实现按需加载的套路
2016/02/26 Javascript
js检查是否关闭浏览器的方法
2016/08/02 Javascript
AngularJS equal比较对象实例详解
2016/09/14 Javascript
web前端开发upload上传头像js示例代码
2016/10/22 Javascript
JavaScript实现定时页面跳转功能示例
2017/02/14 Javascript
js实现3d悬浮效果
2017/02/16 Javascript
jQuery实现三级联动效果
2017/03/02 Javascript
详解使用webpack构建多页面应用
2017/12/21 Javascript
使用Javascript简单计算器
2018/11/17 Javascript
JS使用队列对数组排列,基数排序算法示例
2019/03/02 Javascript
vue实现弹幕功能
2019/10/25 Javascript
javascript实现前端input密码输入强度验证
2020/06/24 Javascript
Element Input输入框的使用方法
2020/07/26 Javascript
Python生成密码库功能示例
2017/05/23 Python
windows下Virtualenvwrapper安装教程
2017/12/13 Python
python基础教程项目三之万能的XML
2018/04/02 Python
详解Django中类视图使用装饰器的方式
2018/08/12 Python
python暴力解压rar加密文件过程详解
2019/07/05 Python
python求质数列表的例子
2019/11/24 Python
CSS+jQuery+PHP+MySQL实现的在线答题功能
2015/04/25 HTML / CSS
用HTML5的canvas实现一个炫酷时钟效果
2016/05/20 HTML / CSS
彪马英国官网:PUMA英国
2019/02/11 全球购物
简历上的自我评价怎么写
2014/01/28 职场文书
小学教师评语大全
2014/04/23 职场文书
群众路线个人对照检查材料2014
2014/09/26 职场文书
2016年“6.26”禁毒宣传月系列活动总结
2016/04/05 职场文书
图文详解Nginx版本平滑升级方案
2021/09/15 Servers