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函数参数类型*、**的区别
Apr 11 Python
Python常用的文件及文件路径、目录操作方法汇总介绍
May 21 Python
python生成器generator用法实例分析
Jun 04 Python
python条件变量之生产者与消费者操作实例分析
Mar 22 Python
Python使用re模块正则提取字符串中括号内的内容示例
Jun 01 Python
让Python脚本暂停执行的几种方法(小结)
Jul 11 Python
实例详解Python装饰器与闭包
Jul 29 Python
Python django搭建layui提交表单,表格,图标的实例
Nov 18 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
May 20 Python
python3 简单实现组合设计模式
Jul 02 Python
Python第三方包PrettyTable安装及用法解析
Jul 08 Python
python从ftp获取文件并下载到本地
Dec 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
十大催泪虐心动漫电影,有几部你还没看
2020/03/04 日漫
PHP+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
2012/07/15 PHP
解析php利用正则表达式解决采集内容排版的问题
2013/06/20 PHP
浅谈php提交form表单
2015/07/01 PHP
PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法分析
2019/06/12 PHP
12行javascript代码绘制一个八卦图
2015/04/02 Javascript
javascript结合canvas实现图片旋转效果
2015/05/03 Javascript
jquery实现Li滚动时滚动条自动添加样式的方法
2015/08/10 Javascript
AngularJS通过$sce输出html的方法
2016/09/22 Javascript
AngularJS入门教程之多视图切换用法示例
2016/11/02 Javascript
angular forEach方法遍历源码解读
2017/01/25 Javascript
详解node.js平台下Express的session与cookie模块包的配置
2017/04/26 Javascript
JavaScript通过mouseover()实现图片变大效果的示例
2017/12/20 Javascript
React中常见的动画实现的几种方式
2018/01/10 Javascript
微信小程序实现商品属性联动选择
2019/02/15 Javascript
vue+element-ui表格封装tag标签使用插槽
2020/06/18 Javascript
[14:56]教你分分钟做大人:巫医
2014/10/30 DOTA
[46:03]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python文件读写并使用mysql批量插入示例分享(python操作mysql)
2014/02/17 Python
TensorFlow实现模型评估
2018/09/07 Python
python使用Matplotlib画饼图
2018/09/25 Python
Python后台管理员管理前台会员信息的讲解
2019/01/28 Python
python3实现zabbix告警推送钉钉的示例
2019/02/20 Python
python f-string式格式化听语音流程讲解
2019/06/18 Python
Python3+Appium实现多台移动设备操作的方法
2019/07/05 Python
Python BeautifulReport可视化报告代码实例
2020/04/13 Python
python中return不返回值的问题解析
2020/07/22 Python
CSS3轻松实现清新 Loading 效果的简单实例
2016/06/06 HTML / CSS
酒店前厅员工辞职信
2014/01/08 职场文书
优良学风班申请材料
2014/02/13 职场文书
吸烟检讨书2000字
2014/02/13 职场文书
领导班子四风对照检查材料思想汇报
2014/09/26 职场文书
学校领导班子四风对照检查材料
2014/09/27 职场文书
刑事辩护授权委托书范本
2014/10/17 职场文书
2016年过年放假安排通知
2015/08/18 职场文书
HTML+JS实现在线朗读器
2022/02/15 Javascript