首页 > 其他分享 >logging模块用于记录日志的标准库

logging模块用于记录日志的标准库

时间:2024-09-11 16:50:43浏览次数:12  
标签:logger logging file handler 模块 日志 message

日志级别是监控和调试软件系统的关键组成部分,它们帮助开发者和运维人员区分不同严重程度的信息,从而更有效地响应和解决问题。以下是日志级别的详细说明及如何在Python中使用它们的示例。

日志级别分类

日志级别按严重程度从低到高排序如下:

  1. DEBUG:用于记录详细的调试信息,通常在开发阶段使用,帮助定位问题。
  2. INFO:记录应用程序的常规运行状态,对用户和运维人员提供系统状态的反馈。
  3. WARNING:标记潜在的问题,系统可能仍在运行,但存在风险,需要关注。
  4. ERROR:记录错误信息,系统功能可能受损,但系统仍能尝试继续运行。
  5. CRITICAL(或FATAL):记录极其严重的错误,系统无法继续运行,需要立即处理。
Python日志级别示例

Python的logging模块提供了丰富的日志级别和配置选项。下面是一个使用logging模块的例子,展示了如何记录不同级别的日志信息:

import logging

# 创建一个logger
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)  # 设置logger的日志级别为DEBUG

# 创建一个FileHandler,用于写入日志文件
fh = logging.FileHandler('app.log')
fh.setLevel(logging.DEBUG)  # 设置handler的日志级别为DEBUG

# 创建一个StreamHandler,用于控制台输出
ch = logging.StreamHandler()
ch.setLevel(logging.WARNING)  # 控制台输出的日志级别设为WARNING

# 创建一个Formatter,用于设定日志格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)

# 添加handler到logger
logger.addHandler(fh)
logger.addHandler(ch)

# 记录不同级别的日志信息
logger.debug("This is a debug message.")  # 只在文件中记录
logger.info("This is an info message.")   # 只在文件中记录
logger.warning("This is a warning message.")  # 在文件和控制台中记录
logger.error("This is an error message.")    # 在文件和控制台中记录
logger.critical("This is a critical message.")  # 在文件和控制台中记录

# 生产环境中,通常只输出WARNING及以上级别的日志
logger.removeHandler(fh)  # 移除文件handler
logger.setLevel(logging.WARNING)
logger.addHandler(ch)

logger.warning("Production warning message.")
logger.error("Production error message.")

选择日志级别

  • DEBUG:在开发阶段使用,记录详细的调试信息。
  • INFO:记录应用运行的基本信息,适用于生产环境,但应谨慎使用以避免过多输出。
  • WARNING:标记潜在的问题,系统仍在运行,但可能存在风险或异常情况。
  • ERROR:记录错误信息,系统功能受损,但仍尝试运行。
  • CRITICAL:记录极其严重的错误,系统无法继续运行。

在生产环境中,通常推荐设置日志级别为WARNINGERROR,以减少日志输出量,避免不必要的性能影响和磁盘空间消耗。而在开发和测试阶段,可以设置较低的日志级别如DEBUGINFO,以获取更详细的系统运行信息。

步骤1:导入logging模块

首先,你需要在你的Python脚本或模块中导入logging模块。

import logging

步骤2:创建Logger实例

接下来,创建一个Logger实例。通常,你会根据模块或应用的名称来命名你的Logger,这有助于在日志文件中区分不同来源的日志。

logger = logging.getLogger('my_logger_name')

步骤3:设置日志级别

设置Logger的日志级别。日志级别有DEBUGINFOWARNINGERROR, 和 CRITICAL。例如,设置日志级别为DEBUG

logger.setLevel(logging.DEBUG)

步骤4:创建Handler

Handler决定了日志信息发送到哪里。常见的HandlerStreamHandler(输出到屏幕)、FileHandler(输出到文件)等。例如,创建一个输出到文件的Handler

file_handler = logging.FileHandler('app.log')

步骤5:设置Handler的日志级别

Logger一样,Handler也有自己的日志级别。例如,设置Handler级别为WARNING

file_handler.setLevel(logging.WARNING)

步骤6:创建Formatter

Formatter用于定义日志信息的格式。例如,创建一个显示时间、名字、日志级别和消息的Formatter

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

步骤7:将Formatter添加到Handler

Formatter应用到Handler上:

file_handler.setFormatter(formatter)

步骤8:将Handler添加到Logger

Handler添加到Logger实例中,这样Logger就可以通过Handler来输出日志信息:

logger.addHandler(file_handler)

步骤9:记录日志

现在,你可以使用logger来记录不同级别的日志信息了。例如:

logger.debug("Debug message")
logger.info("Info message")
logger.warning("Warning message")
logger.error("Error message")
logger.critical("Critical message")

完整示例

将以上步骤组合成一个完整的示例:

import logging

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

# 创建handler
file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.WARNING)

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

# 添加handler到logger
logger.addHandler(file_handler)

# 记录日志
logger.debug("This is a debug message.")
logger.info("This is an info message.")
logger.warning("This is a warning message.")
logger.error("This is an error message.")
logger.critical("This is a critical message.")

多个Handler的使用

你还可以为一个Logger添加多个Handler,这样就可以将日志信息同时输出到多个地方。例如,同时输出到文件和控制台:

import logging

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

# 文件handler
file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)

# 控制台handler
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)
console_handler.setFormatter(formatter)
logger.addHandler(console_handler)

# 记录日志
logger.debug("Debug message (only in file).")
logger.info("Info message (in console and file).")
logger.warning("Warning message (in console and file).")
logger.error("Error message (in console and file).")
logger.critical("Critical message (in console and file).")

通过合理配置日志级别,你可以确保在不影响系统性能的同时,记录下所有关键信息,便于后续分析和问题解决。在Python中,logging模块提供了灵活的日志管理机制,可以根据需要动态调整日志级别和输出方式。

标签:logger,logging,file,handler,模块,日志,message
From: https://blog.csdn.net/KIKI3666/article/details/142144492

相关文章

  • 封装日志工具
    初始化日志记录器:通过传入domain和prefix创建日志记录器实例。日志输出方法:提供debug、info、warn和error四个方法,分别用于记录不同级别的日志信息。每个方法接收可变数量的字符串参数,并使用hilog库进行日志记录。import{hilog}from'@kit.PerformanceAnalysisKit'//......
  • 2024.9 模拟赛日志
    目录NOD2301(20240904)NOD2304(20240905)2024年广州市赛第一试(20240907)2024年广州市赛第二试(20240908)金华一中24联训day15(20240910)SS240911(20240911)NOD2301(20240904)[A日记和最短路]字符串字典序题,\(a<b\iffc+a<c+b\),在Trie上维护倍增的哈希值。[B日记和欧拉函数]\(\varphi(......
  • Nuxt Kit 的使用指南:模块创建与管理
    title:NuxtKit的使用指南:模块创建与管理date:2024/9/11updated:2024/9/11author:cmdragonexcerpt:摘要:本文是关于NuxtKit的使用指南,重点介绍了如何使用defineNuxtModule创建自定义模块及installModule函数以编程方式安装模块,以增强Nuxt3应用的功能性、可维护性和......
  • 【C#生态园】高效管理日志:C# 开发者不可错过的六大日志记录库
    C#日志记录库大比拼:选择最适合你的工具前言在C#应用程序开发过程中,日志记录是一个至关重要的方面。它不仅可以帮助开发人员跟踪应用程序的运行状态和故障信息,还能为用户提供更好的支持和维护服务。本文将介绍几个流行的C#日志记录库,包括Serilog、NLog、Log4net、Elm......
  • PointNet++改进策略 :模块改进 | SWA| PVT,融入Transformer的点云与体素的模块同时提升
    目录介绍PVT原理PVT的核心思想和结构PVT模块结构体素分支点分支代码实现论文题目:PVT:Point-VoxelTransformerforPointCloudLearning发布期刊:InternationalJournalofIntelligentSystems通讯地址:杭州电子科技大学&伦敦大学学院代码地址:https://github.com/......
  • PointNet++改进策略 :模块改进 | x-Conv | PointCNN, 结合局部结构与全局排列提升模型性
    目录前言PointCNN实现细节1.XXX-Conv操作输入输出步骤2.PointCNN网络架构层级卷积分类与分割任务......
  • 日志与追踪的完美融合:OpenTelemetry MDC 实践指南
    前言在前面两篇实战文章中:OpenTelemetry实战:从零实现分布式链路追踪OpenTelemetry实战:从零实现应用指标监控覆盖了可观测中的指标追踪和metrics监控,下面理应开始第三部分:日志。但在开始日志之前还是要先将链路追踪和日志结合起来看看应用实际使用的实践。通常我们排查......
  • GBase 8a通过集群日志查看执行计划和每个阶段的整体耗时和各个节点的耗时做性能排查
    GBase8a提供了执行计划,以及不同的日志级别,现实整体各个节点耗时,以及每个节点的耗时,来方便用户进行性能排查,本文介绍详细的分析方法。环境2节点虚拟机集群[gbase@rh6-1~]$gcadminCLUSTERSTATE:ACTIVECLUSTERMODE:NORMAL=========================================......
  • 2024.8 模拟赛日志
    目录前七天讲课(20240730~20240805)24暑期集训ab班day1(20240806)24暑期集训ab班day2(20240807)24暑期集训ab班day3(20240808)24暑期集训ab班day4(20240809)24暑期集训ab班day5(20240810)24暑期集训ab班day6(20240811)24暑期集训ab班day7(20240812)24暑期集训ab班day8(20240813)24暑期集训ab......
  • 解决python封装Logging模块后,log位置显示错误的问题
    引入今天由于项目需要,要将logging库二次封装成一个类,以实现一些自定义的功能。我将二次封装了一个logService类,然后在其中同样也实现info,warn,error等日志函数。额外加了一个将日志存入数据库的功能。大概是像下面这样子:但是在封装的过程中,出现了一个问题:log中,不能正确显......