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使用simplejson模块解析JSON的方法
Mar 24 Python
怎样使用Python脚本日志功能
Aug 14 Python
解决python3中自定义wsgi函数,make_server函数报错的问题
Nov 21 Python
详解Django中间件的5种自定义方法
Jul 26 Python
python使用udp实现聊天器功能
Dec 10 Python
详解Python数据分析--Pandas知识点
Mar 23 Python
python中metaclass原理与用法详解
Jun 25 Python
python3.6+django2.0+mysql搭建网站过程详解
Jul 24 Python
python numpy--数组的组合和分割实例
Feb 24 Python
python用pip install时安装失败的一系列问题及解决方法
Feb 24 Python
python读取excel数据绘制简单曲线图的完整步骤记录
Oct 30 Python
Python类方法总结讲解
Jul 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
Gregarius中文日期格式问题解决办法
2008/04/22 PHP
PHP树-不需要递归的实现方法
2016/06/21 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
用jQuery中的ajax分页实现代码
2011/09/20 Javascript
javascript正则表达式参数/g与/i及/gi的使用指南
2014/08/27 Javascript
JavaScript的原型继承详解
2015/02/15 Javascript
JavaScript实现自动生成网页元素功能(按钮、文本等)
2015/11/21 Javascript
javascript中去除数组重复元素的实现方法【实例】
2016/04/12 Javascript
JavaScript数组的栈方法与队列方法详解
2016/05/26 Javascript
基于JS实现密码框(password)中显示文字提示功能代码
2016/05/27 Javascript
JavaScript进阶练习及简单实例分析
2016/06/03 Javascript
JS弹出窗口的运用与技巧大全
2016/11/01 Javascript
基于node.js的fs核心模块读写文件操作(实例讲解)
2017/09/10 Javascript
微信小程序之选项卡的实现方法
2017/09/29 Javascript
微信小程序loading组件显示载入动画用法示例【附源码下载】
2017/12/09 Javascript
VUE2.0+Element-UI+Echarts封装的组件实例
2018/03/02 Javascript
一步步教会你微信小程序的登录鉴权
2018/04/09 Javascript
angular-tree-component的使用详解
2018/07/30 Javascript
Vue列表渲染的示例代码
2018/11/01 Javascript
JS实现的Object数组去重功能示例【数组成员为Object对象】
2019/02/01 Javascript
小程序实现左滑删除的效果的实例代码
2020/10/19 Javascript
[00:48]完美“圣”典2016风云人物:xiao8宣传片
2016/11/30 DOTA
用Python编写简单的定时器的方法
2015/05/02 Python
Python深入06——python的内存管理详解
2016/12/07 Python
Python 多进程和数据传递的理解
2017/10/09 Python
python调用pyaudio使用麦克风录制wav声音文件的教程
2019/06/26 Python
用python3 返回鼠标位置的实现方法(带界面)
2019/07/05 Python
Python pandas实现excel工作表合并功能详解
2019/08/29 Python
Canvas高级路径操作之拖拽对象的实现
2019/08/05 HTML / CSS
canvas绘制图片drawImage使用方法
2020/09/15 HTML / CSS
Hoka One One法国官网:美国专业跑鞋品牌
2018/12/29 全球购物
上班时间打瞌睡检讨书
2014/09/26 职场文书
留学推荐信英文范文
2015/03/26 职场文书
团委工作总结2015
2015/04/02 职场文书
乡镇党建工作总结2015
2015/05/19 职场文书
Spring Boot实战解决高并发数据入库之 Redis 缓存+MySQL 批量入库问题
2022/02/12 Redis