首页 > 其他分享 >logging 模块

logging 模块

时间:2024-05-27 11:12:35浏览次数:23  
标签:logging file handler 处理器 模块 日志 logger

logging 模块的核心点主要包括以下几个方面:基本配置、日志级别、日志记录器(Logger)、处理器(Handler)、格式器(Formatter)和过滤器(Filter)

当然可以,系统学习 logging 模块的核心点主要包括以下几个方面:基本配置、日志级别、日志记录器(Logger)、处理器(Handler)、格式器(Formatter)和过滤器(Filter)。下面我们详细讲解每个核心点,并提供相应的示例。

1. 基本配置

logging.basicConfig() 是最简单的配置方法,它用于设置日志记录的基本配置。

这种模式相当如是一种简配模式,比较快速,但不够灵活

import logging

logging.basicConfig(
    level=logging.INFO,  # 设置日志级别
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',  # 日志格式
    filename='app.log',  # 日志文件名
    filemode='w'  # 写入模式,'w' 表示覆盖写,'a' 表示追加写
)

logging.info("这是一个信息日志")
logging.warning("这是一个警告日志")
logging.error("这是一个错误日志")

2. 日志级别

日志级别决定了日志的严重程度,从低到高有:DEBUGINFOWARNINGERRORCRITICAL。在配置时设置的日志级别决定了低于该级别的日志信息不会被记录。

logging.debug("这是调试信息")
logging.info("这是普通信息")
logging.warning("这是警告信息")
logging.error("这是错误信息")
logging.critical("这是严重错误信息")

3. 日志记录器(Logger)

日志记录器是 logging 模块的核心对象,用于记录日志。可以通过 logging.getLogger(name) 创建或获取一个记录器。

logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)

logger.debug("这是调试信息")
logger.info("这是普通信息")

4. 处理器(Handler)

处理器决定了日志发送到哪里。常用的处理器有 StreamHandler(输出到控制台)和 FileHandler(输出到文件)。

# 创建处理器
console_handler = logging.StreamHandler()
file_handler = logging.FileHandler('file.log')

# 设置处理器日志级别
console_handler.setLevel(logging.DEBUG)
file_handler.setLevel(logging.ERROR)

# 将处理器添加到记录器
logger.addHandler(console_handler)
logger.addHandler(file_handler)

5. 格式器(Formatter)

格式器决定了日志的输出格式。通过 logging.Formatter 可以设置日志格式。

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)

6. 过滤器(Filter)

过滤器用于对日志进行更细粒度的控制,决定哪些日志应该被记录。

class MyFilter(logging.Filter):
    def filter(self, record):
        return '关键字' in record.getMessage()

logger.addFilter(MyFilter())

logger.info("这是一个包含关键字的信息")
logger.info("这是一条普通信息")

综合示例

综合以上内容,下面是一个完整的示例,展示了如何配置和使用 logging 模块:

这种模式就比较自由,配置灵活。

import logging

# 创建记录器
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)

# 创建处理器
console_handler = logging.StreamHandler()
file_handler = logging.FileHandler('app.log')

# 设置处理器日志级别
console_handler.setLevel(logging.DEBUG)
file_handler.setLevel(logging.ERROR)

# 创建格式器并设置给处理器
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)

# 将处理器添加到记录器
logger.addHandler(console_handler)
logger.addHandler(file_handler)

# 添加过滤器
class MyFilter(logging.Filter):
    def filter(self, record):
        return '关键字' in record.getMessage()

logger.addFilter(MyFilter())

# 记录日志
logger.debug("这是调试信息")
logger.info("这是包含关键字的信息")
logger.warning("这是警告信息")
logger.error("这是错误信息")
logger.critical("这是严重错误信息")

标签:logging,file,handler,处理器,模块,日志,logger
From: https://www.cnblogs.com/babyfengfjx/p/18215112

相关文章

  • 万字详解YOLOv8网络结构Backbone/neck/head以及Conv、Bottleneck、C2f、SPPF、Detect
    YOLO目标检测创新改进与实战案例专栏目录:YOLO有效改进系列及项目实战目录包含卷积,主干注意力,检测头等创新机制以及各种目标检测分割项目实战案例简介YOLOv8是由Ultralytics开发的最先进的目标检测模型,推升了速度、准确性和用户友好性的界限。YOLO这一缩写代表“你......
  • idea启动报错:java.lang.NoClassDefFoundError: org/mybatis/logging/LoggerFactory
    文章目录一、问题二、解决方法一、问题问题描述:idea整合Mybatis-plus的时候,启动报错:java.lang.NoClassDefFoundError:org/mybatis/logging/LoggerFactory二、解决方法可能原因:仔细检查了一下,发现mybatis-spring-boot-starter的包和mybatis-plus-boot-starter的......
  • 【Python快速上手(三十)】- 详解Python random 模块和 statistics 模块
    目录Python快速上手(三十)-详解Pythonrandom模块和statistics模块1.Pythonrandom模块1.1生成随机数1.2随机选择和打乱1.3随机分布1.4种子和状态2.Pythonstatistics模块2.1均值和中位数2.2众数2.3方差和标准差2.4协方差和相关性2.5分位数和百分位数2.6......
  • 设计一个代办功能模块
    目录1.需求分析2.数据库设计用户表(UsersTable)代办任务表(TasksTable)订单表(OrdersTable)评价表(ReviewsTable)3.功能实现创建代办任务前端部分后端部分接受代办任务前端部分后端部分完成代办任务前端部分后端部分支付代办任务前端部分后端部分评价代办任务前端部......
  • YOLOv5/v7 引入 YOLOv8 的 C2f 模块
    1.介绍YOLOv8是Ultralytics团队于2022年10月发布的最新一代目标检测模型。YOLOv8在YOLOv7的基础上进行了多项改进,包括引入C2f模块、改进PathAggregationNetwork(PAN)结构、优化LabelAssigning算法等。C2f模块是YOLOv8中引入的主要创新之一。C2f模块......
  • YOLOv5/v7 引入 RepVGG 重参数化模块
    YOLOv5/v7中引入RepVGG重参数化模块1.介绍RepVGG是由MegviiResearch团队于2021年提出的深度卷积神经网络架构,它通过重参数化VGGNet架构,显著提高了模型的性能和效率。RepVGG架构在YOLOv5和YOLOv7等目标检测模型中得到了广泛应用,进一步提升了模型的精度和速度......
  • ‘模块化‘ ’信息隐藏和局部化’
    什么是模块化:模块化是将一个系统或项目分解成独立的、可替换的模块,每个模块具有特定的功能和接口。通过将系统分解为模块,可以更好地组织和管理代码,提高代码的可读性、可维护性和可扩展性。为什么要模块化:1. 提高代码的组织性和可读性2. 降低代码的复杂性3. 增强代码的可......
  • [集群聊天服务器]----(四)MySQL数据库模块
    上一节我们对网络模块和业务模块进行了解耦[集群聊天服务器]----(三)ChatService模块,解耦网络模块和业务模块,封装了回调函数。在项目中需要使用mysql数据库进行存储用户重要数据,并进行增删改查操作。,所以这一节我们对mysql的封装使用进行剖析,这里使用db类进行封装。数据库......
  • python系列:Python3 XML处理模块详解
    Python3XML处理模块详解Python3XML处理模块详解一:XML文件格式二:ElementTree解析XML文件Element常用属性如下:1、tag2、attrib3、text4、childelements三:Element之查找四:Element之修改五:Element之删除六:Element之增加七:Element之排序Python3XML处理模块详解x......
  • MDS800-16-ASEMI整流模块800A 1600V
    编辑:llMDS800-16-ASEMI整流模块800A1600V型号:MDS800-16品牌:ASEMI封装:MDS批号:2024+分类:整流模块特性:整流模块、整流桥平均正向整流电流(Id):800A最大反向击穿电压(VRM):1600V恢复时间:>2000ns正向峰值电压:1.25V引脚数量:5芯片个数:6芯片尺寸:MILMDS800-16特点芯片与底板电气......