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标准算法实现数组全排列的方法
Mar 17 Python
Python中常见的数据类型小结
Aug 29 Python
pip命令无法使用的解决方法
Jun 12 Python
python 实现读取一个excel多个sheet表并合并的方法
Feb 12 Python
对PyQt5中的菜单栏和工具栏实例详解
Jun 20 Python
python numpy之np.random的随机数函数使用介绍
Oct 06 Python
Python实现CAN报文转换工具教程
May 05 Python
Python-opencv实现红绿两色识别操作
Jun 04 Python
快速了解Python开发环境Spyder
Jun 29 Python
Python 中如何写注释
Aug 28 Python
python实现感知机模型的示例
Sep 30 Python
如何使用Python实现一个简易的ORM模型
May 12 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
mysql数据库差异比较的PHP代码
2012/02/05 PHP
Thinkphp通过一个入口文件如何区分移动端和PC端
2017/04/18 PHP
Laravel框架实现的上传图片到七牛功能详解
2019/09/06 PHP
thinkphp5框架路由原理与用法详解
2020/02/11 PHP
JS控件autocomplete 0.11演示及下载 1月5日已更新
2007/01/09 Javascript
javascript返回顶部效果(自写代码)
2013/01/06 Javascript
juery框架写的弹窗效果适合新手
2013/11/27 Javascript
js实现div的切换特效上一个下一个
2014/02/11 Javascript
javascript 操作符(~、&、|、^、)使用案例
2014/12/31 Javascript
浅谈利用JavaScript进行的DDoS攻击原理与防御
2015/06/04 Javascript
高性能JavaScript 重排与重绘(2)
2015/08/11 Javascript
JavaScript实现为input与textarea自定义hover,focus效果的方法
2015/08/21 Javascript
基于jquery css3实现点击动画弹出表单源码特效
2015/08/31 Javascript
JS自动生成动态HTML验证码页面
2017/06/14 Javascript
Layui table 组件的使用之初始化加载数据、数据刷新表格、传参数
2017/09/11 Javascript
jQuery easyui datagird编辑行删除行功能的实现代码
2018/09/20 jQuery
深入探讨JavaScript的最基本部分之执行上下文
2019/02/12 Javascript
js form表单input框限制20个字符,10个汉字代码实例
2019/04/12 Javascript
[01:35]2018年度CS GO最佳战队-完美盛典
2018/12/17 DOTA
Python编程中实现迭代器的一些技巧小结
2016/06/21 Python
Python concurrent.futures模块使用实例
2019/12/24 Python
Python reshape的用法及多个二维数组合并为三维数组的实例
2020/02/07 Python
pyinstaller打包找不到文件的问题解决
2020/04/15 Python
Python 使用SFTP和FTP实现对服务器的文件下载功能
2020/12/17 Python
Pytorch实现WGAN用于动漫头像生成
2021/03/04 Python
急诊科护士自我鉴定
2013/10/14 职场文书
小学教师听课制度
2014/02/01 职场文书
客服部班长工作责任制
2014/02/25 职场文书
建房协议书
2014/04/11 职场文书
保险专业求职信
2014/07/07 职场文书
法院干警四风问题个人对照检查材料思想汇报
2014/10/07 职场文书
村党的群众路线教育实践活动总结材料
2014/10/31 职场文书
干货:我将这样书写我的演讲稿!
2019/05/09 职场文书
浅谈JavaScript浅拷贝和深拷贝
2021/11/07 Javascript
JavaScript中document.activeELement焦点元素介绍
2021/11/27 Javascript
mapstruct的用法之qualifiedByName示例详解
2022/04/06 Java/Android