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 ljust rjust center输出
Sep 06 Python
centos下更新Python版本的步骤
Feb 12 Python
python使用点操作符访问字典(dict)数据的方法
Mar 16 Python
Python中str is not callable问题详解及解决办法
Feb 10 Python
python简单鼠标自动点击某区域的实例
Jun 25 Python
python实现在函数中修改变量值的方法
Jul 16 Python
安装2019Pycharm最新版本的教程详解
Oct 22 Python
Python操作SQLite/MySQL/LMDB数据库的方法
Nov 07 Python
Python实现将蓝底照片转化为白底照片功能完整实例
Dec 13 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
Jun 08 Python
Matplotlib中rcParams使用方法
Jan 05 Python
Python中Cookies导出某站用户数据的方法
May 17 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+MySQL 制作简单的留言本
2009/11/02 PHP
PHP 设置MySQL连接字符集的方法
2011/01/02 PHP
php 数组处理函数extract详解及实例代码
2016/11/23 PHP
php readfile下载大文件失败的解决方法
2017/05/22 PHP
PHP中的empty、isset、isnull的区别与使用实例
2019/03/22 PHP
javascript 函数式编程
2007/08/16 Javascript
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
2014/01/02 Javascript
jquery取消选择select下拉框示例代码
2014/02/22 Javascript
jQuery后代选择器用法实例
2014/12/23 Javascript
javascript获取四位数字或者字母的随机数
2015/01/09 Javascript
基于JavaScript怎么实现让歌词滚动播放
2015/11/03 Javascript
js print打印网页指定区域内容的简单实例
2016/11/01 Javascript
详解使用vue实现tab 切换操作
2017/07/03 Javascript
vue.js $refs和$emit 父子组件交互的方法
2017/12/20 Javascript
除Console.log()外更多的Javascript调试命令
2018/01/24 Javascript
JavaScript遍历数组的三种方法map、forEach与filter实例详解
2019/02/27 Javascript
jQuery鼠标滑过横向时间轴样式(代码详解)
2019/11/01 jQuery
jquery实现上传图片功能
2020/06/29 jQuery
vue 在单页面应用里使用二级套嵌路由
2020/12/19 Vue.js
[04:11]DOTA2上海特级锦标赛主赛事首日TOP10
2016/03/03 DOTA
python3+PyQt5实现拖放功能
2018/04/24 Python
浅谈python中字典append 到list 后值的改变问题
2018/05/04 Python
目前最全的python的就业方向
2018/06/05 Python
Python 实现异步调用函数的示例讲解
2018/10/14 Python
对Python3 * 和 ** 运算符详解
2019/02/16 Python
详解python编译器和解释器的区别
2019/06/24 Python
python matplotlib中的subplot函数使用详解
2020/01/19 Python
解决django FileFIELD的编码问题
2020/03/30 Python
django xadmin action兼容自定义model权限教程
2020/03/30 Python
python使用Word2Vec进行情感分析解析
2020/07/31 Python
大学生专科学习生活的自我评价
2013/12/07 职场文书
平面设计专业大学生职业规划书
2014/03/12 职场文书
社区党建工作汇报材料
2014/08/14 职场文书
2014年团支部年度工作总结
2014/12/24 职场文书
刑事附带民事起诉状
2015/05/19 职场文书
通过shell脚本对mysql的增删改查及my.cnf的配置
2021/07/07 MySQL