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中asyncore异步模块的用法及实现httpclient的实例
Jun 28 Python
浅谈python jieba分词模块的基本用法
Nov 09 Python
python实现猜单词小游戏
May 22 Python
Python反射和内置方法重写操作详解
Aug 27 Python
python构建基础的爬虫教学
Dec 23 Python
解决pycharm的Python console不能调试当前程序的问题
Jan 20 Python
python conda操作方法
Sep 11 Python
python爬虫中多线程的使用详解
Sep 23 Python
Python基于os.environ从windows获取环境变量
Jun 09 Python
keras训练曲线,混淆矩阵,CNN层输出可视化实例
Jun 15 Python
python cookie反爬处理的实现
Nov 01 Python
搭建pypi私有仓库实现过程详解
Nov 25 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将会员数据导入到ucenter的代码
2010/07/18 PHP
使用PHP和HTML5 FormData实现无刷新文件上传教程
2014/09/06 PHP
php写一个函数,实现扫描并打印出自定目录下(含子目录)所有jpg文件名
2017/05/26 PHP
JQUERY 设置SELECT选中项代码
2014/02/07 Javascript
jQuery Validate插件实现表单强大的验证功能
2015/12/18 Javascript
详解为Angular.js内置$http服务添加拦截器的方法
2016/12/20 Javascript
谈谈Vue.js——vue-resource全攻略
2017/01/16 Javascript
js实现简单的选项卡效果
2017/02/23 Javascript
基于openlayers4实现点的扩散效果
2020/08/17 Javascript
babel的使用及安装配置教程
2018/02/22 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
vue中动态设置meta标签和title标签的方法
2018/07/11 Javascript
vue中keep-alive组件的入门使用教程
2019/06/06 Javascript
Vue实现开心消消乐游戏算法
2019/10/22 Javascript
JS实现简单打字测试
2020/06/24 Javascript
树莓派中python获取GY-85九轴模块信息示例
2013/12/05 Python
解决Pycharm下面出现No R interpreter defined的问题
2018/10/29 Python
基于python判断字符串括号是否闭合{}[]()
2020/09/21 Python
python向企业微信发送文字和图片消息的示例
2020/09/28 Python
python 6种方法实现单例模式
2020/12/15 Python
Python自动化测试基础必备知识点总结
2021/02/07 Python
使用CSS3创建动态菜单效果
2015/07/10 HTML / CSS
HTML5拍照和摄像机功能实战详解
2019/01/24 HTML / CSS
Ann Taylor官方网站:美国最大的女性产品制造商之一
2016/09/14 全球购物
意大利拉斐尔时尚购物网:Raffaello Network(支持中文)
2018/11/09 全球购物
艺术用品:Arteza
2018/11/25 全球购物
英国经济型酒店品牌:Travelodge
2019/12/17 全球购物
法律工作求职自荐信
2013/10/31 职场文书
岗位职责怎么写
2014/03/14 职场文书
气象学专业个人求职信
2014/03/15 职场文书
法院信息化建设方案
2014/05/21 职场文书
校园安全标语
2014/06/07 职场文书
公司表扬稿范文
2015/05/05 职场文书
浅谈mysql哪些情况会导致索引失效
2021/11/20 MySQL
Golang数据类型和相互转换
2022/04/12 Golang
python 闭包函数详细介绍
2022/04/19 Python