Python logging模块进行封装实现原理解析

作者:不放弃自己 时间:2021-02-15 07:51:44 

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")
'''

来源:https://www.cnblogs.com/hghua/p/13268007.html

标签:Python,logging,模块,封装
0
投稿

猜你喜欢

  • Python中基本数据类型和常用语法归纳分享

    2023-09-08 21:08:01
  • python读取json数据还原表格批量转换成html

    2023-11-19 05:46:20
  • ASP判断E-Mail的合法性,以及过滤邮箱字符

    2010-05-27 12:23:00
  • python3设计模式之简单工厂模式

    2021-02-16 15:51:18
  • JS组件Bootstrap实现弹出框和提示框效果代码

    2023-07-02 05:25:13
  • python第三方库pygame的使用详解

    2023-07-21 13:27:19
  • JavaScript之IE的fireEvent方法详细解析

    2024-06-05 09:11:28
  • python爬虫入门教程--优雅的HTTP库requests(二)

    2022-04-01 05:10:43
  • 详解Laravel服务容器的优势

    2023-10-31 03:36:04
  • python实现TF-IDF算法解析

    2021-06-02 03:27:51
  • django form和field具体方法和属性说明

    2023-07-24 11:22:45
  • MySQL定时备份之使用Linux下的crontab定时备份实例

    2024-01-18 01:43:52
  • Linux系统下Mysql使用简单教程(一)

    2024-01-16 20:26:51
  • PHP实用函数分享之去除多余的0

    2023-11-15 02:07:59
  • MySQL Replication中的并行复制示例详解

    2024-01-29 02:49:03
  • Vue Socket.io源码解读

    2024-06-05 15:28:35
  • MySQL 复制详解及简单实例

    2024-01-15 12:50:28
  • PyCharm永久激活方式(推荐)

    2023-06-12 00:53:33
  • PHP邮件发送类PHPMailer用法实例详解

    2023-11-19 16:31:17
  • Django与AJAX实现网页动态数据显示的示例代码

    2022-11-05 01:10:17
  • asp之家 网络编程 m.aspxhome.com