Python logging模块原理解析及应用

作者:Maruying 时间:2022-04-08 11:14:32 

一、logging日志模块等级

常见log级别从高到低:

CRITICAL 》ERROR 》WARNING 》INFO 》DEBUG,默认等级为WARNING,即>=WARNING级别的log才输出。

日志等级(level)描述
CRITICAL当发生严重错误,导致应用程序不能继续运行时记录的信息
ERROR由于一个更严重的问题导致某些功能不能正常运行时记录的信息
WARNING当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但是此时应用程序还是正常运行的
INFO信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作
DEBUG最详细的日志信息,典型应用场景是 问题诊断

二、logging模块的使用方式介绍

logging模块提供了两种记录日志的方式:

  • 第一种方式是使用logging提供的模块级别的函数

  • 第二种方式是使用Logging日志系统的四大组件

其实,logging所提供的模块级别的日志记录函数也是对logging日志系统相关类的封装而已。

(1)logging模块定义的模块级别的常用函数

函数说明
logging.debug(msg, *args, **kwargs)创建一条严重级别为DEBUG的日志记录
logging.info(msg, *args, **kwargs)创建一条严重级别为INFO的日志记录
logging.warning(msg, *args, **kwargs)创建一条严重级别为WARNING的日志记录
logging.error(msg, *args, **kwargs)创建一条严重级别为ERROR的日志记录
logging.critical(msg, *args, **kwargs)创建一条严重级别为CRITICAL的日志记录
logging.log(level, *args, **kwargs)创建一条严重级别为level的日志记录
logging.basicConfig(**kwargs)对root logger进行一次性配置

其中logging.basicConfig(**kwargs)函数用于指定“要记录的日志级别”、“日志格式”、“日志输出位置”、“日志文件的打开模式”等信息,其他几个都是用于记录各个级别日志的函数。

(2)logging模块的四大组件

组件说明
loggers提供应用程序代码直接使用的接口
handlers用于将日志记录发送到指定的目的位置
filters提供更细粒度的日志过滤功能,用于决定哪些日志记录将会被输出(其它的日志记录将会被忽略)
formatters用于控制日志信息的最终输出格式

三、自定义Logger模块类


# testLog1.py

import logging
import time

class Logger():

def __init__(self, logger, level=logging.DEBUG):
   ''' : 自定义Logger模块类
   : logger: logger名
   : level: 日志级别
   '''

# 创建一个logger
   self.logger = logging.getLogger(logger)
   self.logger.setLevel(level)

# 定义handler的输出格式
   curr_time = time.strftime("%Y-%m-%d")
   self.LogFileName = 'log' + curr_time + '.txt'
   fmt = logging.Formatter('%(asctime)s - %(filename)s:[%(lineno)s] - [%(levelname)s] - %(message)s')

# asctime: 日志事件发生的时间
   # filename: 源文件的名称部分,包含文件后缀
   # lineno: 调用日志记录函数的源代码所在的行号
   # evelname: 该日志记录的文字形式的日志级别
   # message: 日志记录的文本内容

# 创建一个handler, 用于写入日志文件
   fh = logging.FileHandler(self.LogFileName)
   fh.setLevel(logging.DEBUG)
   fh.setFormatter(fmt)

# 再创建一个handler,用于输出到控制台
   ch = logging.StreamHandler()
   ch.setLevel(logging.DEBUG)
   ch.setFormatter(fmt)

# 给logger添加handler
   self.logger.addHandler(fh)
   self.logger.addHandler(ch)

# level优先级
   # logger.setLevel > handler.setLevel > logging.basicConfig

if __name__ == "__main__":
 log = Logger(__name__, level=logging.DEBUG)
 log.logger.debug('debug')
 log.logger.log(logging.DEBUG, 'debug')# 执行testLog1.py,则控制台输出如下:2020-08-03 20:36:47,104 - testLog1.py:[117] - [DEBUG] - debug2020-08-03 20:36:47,104 - testLog1.py:[118] - [DEBUG] - debug# 日志文件记录如下:2020-08-03 20:36:15,982 - testLog1.py:[117] - [DEBUG] - debug2020-08-03 20:36:15,982 - testLog1.py:[118] - [DEBUG] - debug

# testLog2.py

from testLog1 import Logger
import traceback

log = Logger(__name__)
def func():
 try:
   assert 1==2
 except Exception:
   log.logger.info('测试失败,输出信息如下:{}'.format(traceback.format_exc()))# traceback.format_exc() 会返回异常信息的字符串

if __name__ == "__main__":
 func()# 执行testLog2.py,则控制台输出如下:2020-08-03 20:43:44,907 - testLog2.py:[11] - [INFO] - 测试失败,输出信息如下:Traceback (most recent call last):  File "E:/imooc/testLog.py", line 9, in func    assert 1==2AssertionError# 日志文件记录如下:2020-08-03 20:43:44,907 - testLog2.py:[11] - [INFO] - 测试失败,输出信息如下:Traceback (most recent call last):  File "E:/imooc/testLog.py", line 9, in func    assert 1==2AssertionError

来源:https://www.cnblogs.com/Maruying/p/13427596.html

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

猜你喜欢

  • JS求解三元一次方程组值的方法

    2024-05-02 17:39:00
  • 关于CSS学习——写给初学者

    2008-07-25 19:17:00
  • MySQL主从原理及配置详解

    2024-01-26 08:33:42
  • Oracle相关组件版本信息的介绍

    2023-07-14 09:19:53
  • ChatGPT如何写好Prompt编程示例详解

    2022-06-30 03:55:24
  • Python下实现的RSA加密/解密及签名/验证功能示例

    2022-06-25 03:07:16
  • django 解决manage.py migrate无效的问题

    2021-08-18 02:28:51
  • 如何使用json在前后台进行数据传输实例介绍

    2024-05-03 15:03:56
  • js调用设备摄像头的方法

    2024-04-17 09:46:46
  • 小技巧解决“FF不能读取outerHTML”的问题

    2009-02-10 10:44:00
  • Python实现数字图像处理染色体计数示例

    2022-06-15 03:32:36
  • PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】

    2023-09-11 08:28:26
  • python-docx 页面设置详解

    2021-12-06 03:42:02
  • Oracle学习笔记(四)

    2012-01-05 18:57:33
  • python自动化测试selenium核心技术等待条件教程

    2022-02-23 15:18:04
  • yolov5训练时参数workers与batch-size的深入理解

    2021-08-01 04:50:20
  • 详解如何使用Python实现删除重复文件

    2022-08-14 04:33:54
  • TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现

    2023-02-14 17:08:47
  • python3 通过 pybind11 使用Eigen加速代码的步骤详解

    2023-05-13 21:53:18
  • Python GUI库PyQt5图形和特效样式QSS介绍

    2022-05-03 09:25:34
  • asp之家 网络编程 m.aspxhome.com